如何获取客户端的SQL列值的总和?

时间:2015-08-23 04:45:15

标签: javascript mysql jsp jstl

服务器端我有这个名为product的表:

id | prod_name | prod_price | description | points

如上图所示,每种产品都有点星巴克的价值,你购买的每种咖啡都会给你一张贴纸,一旦你完成了一张卡片,就会得到免费的咖啡。我在我的商店使用相同的概念。

购买的每件产品都会为用户提供积分。当然,积分的价值根据价格而定。对他来说越高越好。

如何根据他放入购物篮/购物车的产品向他展示他积累的积分总额?每当他将产品放入购物篮时,总和就需要动态升级。我希望JSTLSQL作为最小化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>

2 个答案:

答案 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>