jsp内嵌java代码怎么取得jstl标签jstl表达式foreachh循环中的对象的某个属性?

jsp下读取c:forEach的循环次数,以及内部循环数据累加统计等
近日接触到一个比较旧的项目,框架使用的是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" %&
上面的例子上使用到了下面的标签,作用是格式化数字的
:parseNumber
头部需引入
&%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %&
在c:foreach里同样也有统计字段,可以使用该字段进行统计,但只能在循环体内,完整用法如下,使用${status.count}可以获取循环次数,不过需要注意一下,它的计数是从1开始,而不是0
var=”data" items=”list" varStatus=”status”&
value=”${status.current}”/& 当前对象
value=”${status.index}”/& 此次迭代的索引
value=”${status.count}”/& 已经迭代的数量
value=”${status.first}”/& 是否是第一个迭代对象
value=”${status.last}”/& 是否是最后一个迭代对象
下面是完整例子,用于实现购物车商品的展现与统计
var="row_total" value="0"&&
var="row_count" value="0"&&
var="rowData" items="${shopping_data}"&
var="productprice" value="${rowData.productprice}" type="number" /&
var="row_total" value="${row_total + (productprice*rowData.productnum) }" /&
var="row_count" value="${row_count+1}" /&
class="p-img fl"&
href="${path }/productDetail?productId=${rowData.productid }"&
src="${path }${rowData.f_productimg}" width="50" height="50" alt=""&&
class="p-name fl"&
href="${path }/productDetail?productId=${rowData.productid }" title="${rowData.productname}"&
${rowData.productname}
jsp &c:forEach&循环
以及怎么统计变量的总数量
s:iterator与c:forEach 数字循环
c:forEach 如何输出序号
JSTL的c:forEach标签模拟for循环
&c:forEach&迭代相加计算
jsp如何用foreach嵌套双重循环
c:foreach 循环固定次数
&c:foreach&控制循环次数
java8 stream().forEach 效率
没有更多推荐了,&%@ page language="java" contentType="text/ charset=UTF-8"
pageEncoding="UTF-8"%&
&%@ include file="/includes/ctx.jsp" %&
&%@ taglib uri="/RemoveListItems" prefix="z"%&
&!DOCTYPE html &
&meta http-equiv="Content-Type" content="text/ charset=UTF-8"&
&title&角色管理&/title&
&z:for items="${rolelist}" var="z"&
&p&${z.rolename}&/p&
WEB-INF &目录下创建tld 文件
&?xml version="1.0" encoding="UTF-8"?&
&taglib version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee"&
&tlibversion&1.0&/tlibversion&
&jspversion&1.1&/jspversion&
&shortname&eRedLab JSPTag Library&/shortname&
&uri&/RemoveListItems&/uri&
&info&自定义标签&/info&
&name&for&/name&
&tagclass&com.oa.tag.Repeater&/tagclass&
&bodycontent&scriptless&/bodycontent&
&info&&/info&
&attribute&
&name&items&/name&
&required&true&/required&
&rtexprvalue&true&/rtexprvalue&
&/attribute&
&attribute&
&name&var&/name&
&required&true&/required&
&rtexprvalue&true&/rtexprvalue&
&/attribute&
&attribute&
&name&index&/name&
&required&false&/required&
&rtexprvalue&true&/rtexprvalue&
&/attribute&
&java 类代码
import java.util.L
import javax.servlet.jsp.JspE
import javax.servlet.jsp.tagext.TagS
public class Repeater extends TagSupport {
private static final long serialVersionUID = 9717288L;
private List&?&
public int doStartTag() throws JspException {
if (items == null || items.size() == 0){
return SKIP_BODY;
if(index==null)index = "";
if(i&items.size()){
pageContext.setAttribute(var, items.get(i));
pageContext.setAttribute(index, i);
return EVAL_BODY_INCLUDE;
public int doAfterBody() throws JspException {
if(i & items.size()){
pageContext.setAttribute(var, items.get(i));
pageContext.setAttribute(index, i);
return EVAL_BODY_AGAIN;
return SKIP_BODY;
public int doEndTag() throws JspException {
return EVAL_PAGE;
public void setItems(List&?& items) {
this.items =
public void setVar(String var) {
this.var =
public void setIndex(String index){
this.index =
阅读(...) 评论()【原】JSTL中forEach标签中varStatus属性名列表 ( 16:47:09)
----JSTL学习
&c:forEach&标签提供了varStatus属性,有时候这个属性的作用非常强大,主要是用来存放现在知道的成员的相关信息.
定义 varStatus="s",那么将会吧有关集合中的信息放在名称为"s"的属性中,这里的"s"也是四作用域中的属性名,对应着的属性值内部会存有相关的集合中的信息.而varStatus属性还有另外4个子属性,他们是index,count,first和last,这些全都是属性名,可以在EL表达式中通过这些属性名访问"s"中的对应的属性值.详细说明如下:
&&& 属性名&&&&&&&&&&&&&&&&&&&&& 数据类型&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 意义
&&& index&&&&&&&&&&&&&&&&&&&&&&& number&&&&&&&&&&&&&&&&&&& 现在指到的集合成员的索引(下标从0开始)
&&& count&&&&&&&&&&&&&&&&&&&&&&& number&&&&&&&&&&&&&&&&&&&&&&&&&&&& 指到的成员数目
&&& first&&&&&&&&&&&&&&&&&&&&&&& boolean&&&&&&&&&&&&&&&&&&& 现在指到的集合成员是否为第一个成员
&&& last&&&&&&&&&&&&&&&&&&&&&&&& boolean&&&&&&&&&&&&&&&&&&& 现在知道的集合成员是否为最后一个成员
例:
& &%
& String[] names={"John","Lisa","James"};
& session.setAttribute("names",names);
& %&
& &c:forEach var="name" items="${names}" varStatus="s"&
& &h3&
& &c:out value="${name}"&&/c:out&
& &/h3&
& index:&c:out value="${s['index']}"&&/c:out&&br/&
& count:&c:out value="${s['count']}"&&/c:out&&br/&
& first:&c:out value="${s['first']}"&&/c:out&&br/&
& last:&c:out value="${s['last']}"&&/c:out&&br/&
& &hr/&
& &/c:forEach&
引自:http://blog.sina.com.cn/s/blog_6a0cb8bc0100wezt.html
xiongzhe90
浏览: 189 次
来自: 安康
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'记住登录一个月发表随想还能输入:200字该用户最新代码编程随想&by by by by by by [jsp]代码库&%@page import="java.util.LinkedHashMap"%&
&%@page import="java.util.Map"%&
&%@page import="java.util.HashMap"%&
&%@page import="am_cn.itcast.domain.Student"%&
&%@page import="java.util.List"%&
&%@page import="java.util.ArrayList"%&
&%@ page language="java" contentType="text/ charset=UTF-8"
pageEncoding="UTF-8"%&
&%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%&
&!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&
&meta http-equiv="Content-Type" content="text/ charset=UTF-8"&
&title&Insert title here&/title&
&!-- 1. 操作 javabean的 属性 , list 集合, map 集合, 数组 , 进行常规的 for循环操作
主要 用于 做 循环的 ,遍历 ,取出 目标 中 的 每个 元素 .
List list = new ArrayList();
list.add(new Student("李寒",18,"上海"));
list.add(new Student("孙在驰",19,"香港"));
list.add(new Student("李羿成",17,"东京"));
list.add(new Student("高杰", 19,"湖北"));
list.add(new Student("赵世龙",19,"巴黎"));
list.add(new Student("阿毛",19,"上海"));
list.add(new Student("宋勇",16,"深圳"));
request.setAttribute("list", list);
&c:forEach items="${list }" var="student" &
${student.name }
${student.age } ${student.city } &br/&
&/c:forEach&
&c:forEach items="${list }" var="student" &
${student.name }
${student.age } ${student.city } &br/&
&/c:forEach&
&table border="1" align="center" width="70%"&
&td&索引&/td&
&td&是否是第一个&/td&
&td&是否是最后一个 &/td&
&td&姓名&/td&
&td&年龄&/td&
&td&城市&/td&
&c:forEach items="${list }" var="student" varStatus="vs"&
&tr bgcolor="${vs.index%2==0?"#EBEBEB":"#F8D890" }"&
&td&${vs.index }&/td&
&td&${vs. first}&/td&
&td&${vs.last }&/td&
&td&${student.name }&/td&
&td&${student.age } &/td&
&td&${student.city }&/td&
&/c:forEach&
&!-- 遍历 map 集合,取出
map 集合中的 数据
Map map = new LinkedHashMap();
map.put("aaa", "111");
map.put("bbb", "222");
map.put("ccc", "333");
request.setAttribute("map", map);
&c:forEach items="${map }" var="entry"&
${entry.key }
${entry.value } &br/&
&/c:forEach&
&!-- 遍历 数组
String[] names ={"张柏芝","谢霆锋","王菲","文章"};
request.setAttribute("names", names);
&c:forEach items="${names }" var="name"&
&/c:forEach&
&!-- 进行常规的 for循环操作 --&
// 求 1+2+3... + 9 的 和
int sum = 0;
for(int i=1;i&=9;i++){
out.print(sum);
&!-- 用 foreach 循环 怎么 做 ?
&c:forEach begin="1" end="9" step="1" var="i"&
&c:set var="result" value="${result+i }"&&/c:set&
&/c:forEach&
${result }
&/html&分享到:更多发表评论:评论须知:1、评论每次加2分,每天上限为30;2、请文明用语,共同创建干净的技术交流环境;3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。如何获取JSP页面中c:foreach中的循环变量
[问题点数:50分]
本版专家分:0
结帖率 33.33%
CSDN今日推荐
本版专家分:0
本版专家分:0
本版专家分:1427
2018年4月 Java大版内专家分月排行榜第三
匿名用户不能发表回复!|
其他相关推荐}

我要回帖

更多关于 jstl标签foreach 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信