服务器端我有这个名为product
的表:
id | prod_name | prod_price | description | points
如上图所示,每种产品都有点星巴克的价值,你购买的每种咖啡都会给你一张贴纸,一旦你完成了一张卡片,就会得到免费的咖啡。我在我的商店使用相同的概念。
购买的每件产品都会为用户提供积分。当然,积分的价值根据价格而定。对他来说越高越好。
如何根据他放入购物篮/购物车的产品向他展示他积累的积分总额?每当他将产品放入购物篮时,总和就需要动态升级。我希望JSTL
或SQL
作为最小化JS
数量的解决方案,但我对后者的开放程度相当开放。
所以这是basket.jsp:
<div class="pointsContainer">
My Reward Points: ( <c:out value="${points + points}" /> )
</div>
<div class='block'>
<c:if test="${!empty basket && basket.numberOfItems != 0}">
<h3 class='boardRowHeader'>My Products</h3>
</c:if>
<c:forEach var="basketItem" items="${basket.items}" varStatus="iter">
<c:set var="product" value="${basketItem.product}"/>
<div class="cart_row">
<div class="cart_img"><a href="viewProduct?${product.id}">
<img class="image" alt="" src="${initParam.productGalleryImagePath}${product.id} (1).jpg" />
</div>
<div class="cart_nme"><a class="category_links" href="viewProduct?${product.id}">${product.name}</a></div>
<div class="cart_price">$${product.price}</div>
<div class="cart_update">
${product.points} points
</div>
</div>
</c:forEach>
</div>
答案 0 :(得分:0)
您可以在for循环中使用计数器变量,如下所示:
<div class="pointsContainer">
My Reward Points: ( <c:out value="${points + points}" /> )
</div>
<div class='block'>
<c:if test="${!empty basket && basket.numberOfItems != 0}">
<h3 class='boardRowHeader'>My Products</h3>
</c:if>
<c:forEach var="basketItem" items="${basket.items}" varStatus="iter">
<c:set var="totalPoints" value="0"/>
<c:set var="product" value="${basketItem.product}"/>
<div class="cart_row">
<div class="cart_img"><a href="viewProduct?${product.id}">
<img class="image" alt="" src="${initParam.productGalleryImagePath}${product.id} (1).jpg" />
</div>
<div class="cart_nme"><a class="category_links" href="viewProduct?${product.id}">${product.name}</a></div>
<div class="cart_price">$${product.price}</div>
<div class="cart_update">
${product.points} points
</div>
</div>
<c:set var="totalPoints" value=" ${totalPoints + product.points}"/>
</c:forEach>
</div>
<div class="totalPoints">
Total Points: <c:out value="${totalPoints}" />
</div>
答案 1 :(得分:0)
如果您已经使用Java EE 7 / Servlet 3.1 / EL 3.0(Tomcat 8,WildFly 8,GlassFish 4等),那么只需在EL中使用Stream operations and Lambda即可。这也适用于Java 6/7,并且本身不需要Java 8。
E.g。
<c:forEach items="${basket.items}" var="basketItem">
<c:set var="product" value="${basketItem.product}"/>
<div class="cart_row">
<div class="cart_update">${product.points} points</div>
</div>
</c:forEach>
<div class="totalPoints">
Total Points: ${basket.items.stream().map(item -> item.product.points).sum()}
</div>