jsp下读取c:forEach的循环次数,以及内部循环数据累加统计等

2 篇文章 0 订阅

前言

近日接触到一个比较旧的项目,框架使用的是Status2+Spring3,前端jsp大量内嵌了java代码,几乎未使用jstl和el表达式。
个人习惯原因,已经很不喜欢使用这种通过写java代码在jsp上做逻辑控制的方式,很不好让别人读代码。

表达式循环有几种方式,这里只说c:forEach。
在网上看了一下,没有自己需要的,自己写一个。
场景需求:
某用户登录后查看自己的购物车,及时显示其购物车内的商品种类和合计金额。

原理:

自己创建jstl变量,存储自己需要统计的内容放到循环体里执行即可。
定义2个变量,row_total统计金额,row_count统计数量

<c:set var="row_total" value="0"></c:set>
<c:set var="row_count" value="0"></c:set>

之后自己在循环体里进行运算,这个是自加1

<c:set var="row_count" value="${row_count+1}" />

这个是进行运算

<c:set var="row_total" value="${row_total +(productprice*rowData.productnum) }" />

之后在循环体外直接使用表达式,就是你需要的统计数据了

${row_total }   
${row_count }

然后备注一下,jsp页面头请引入jstl标签库

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

补充1

上面的例子上使用到了下面的标签,作用是格式化数字的

fmt:parseNumber

头部需引入

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> 

补充2

在c:foreach里同样也有统计字段,可以使用该字段进行统计,但只能在循环体内,完整用法如下,使用${status.count}可以获取循环次数,不过需要注意一下,它的计数是从1开始,而不是0

<c:forEach var=”data" items=”list" varStatus=”status”>
    <c:out value=”${status.current}”/> 当前对象
    <c:out value=”${status.index}”/> 此次迭代的索引
    <c:out value=”${status.count}”/> 已经迭代的数量
    <c:out value=”${status.first}”/> 是否是第一个迭代对象
    <c:out value=”${status.last}”/> 是否是最后一个迭代对象
</c:forEach>

下面是完整例子,用于实现购物车商品的展现与统计

<c:set var="row_total" value="0"></c:set>
<c:set var="row_count" value="0"></c:set>
<c:forEach var="rowData" items="${shopping_data}">
    <fmt:parseNumber var="productprice" value="${rowData.productprice}" type="number" />
    <c:set var="row_total" value="${row_total + (productprice*rowData.productnum) }" />
    <c:set var="row_count" value="${row_count+1}" />
<li>                
    <div class="p-img fl">
        <a href="${path }/productDetail?productId=${rowData.productid }">
        <img src="${path }${rowData.f_productimg}" width="50" height="50" alt=""></a>
    </div>                
    <div class="p-name fl">
        <span></span>
        <a href="${path }/productDetail?productId=${rowData.productid }" title="${rowData.productname}">
            ${rowData.productname}
        </a>
    </div> 
</li>
</c:forEach>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值