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

来源:互联网 发布:网络歌手名单大全男 编辑:程序博客网 时间:2024/05/16 16:08

前言

近日接触到一个比较旧的项目,框架使用的是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>
原创粉丝点击