JSTL中的c:forEach, c:forTokens标签

参考教程链接:cforEach, cforTokens标签

这两个标签封装了Java中的for,while,do-while循环。
相比而言,<c:forEach>标签是更加通用的标签,因为它迭代一个集合中的对象。
<c:forTokens>标签通过指定分隔符将字符串分隔为一个数组然后迭代它们。

forEach语法格式
<c:forEach
    items="<object>"
    begin="<int>"
    end="<int>"
    step="<int>"
    var="<string>"
    varStatus="<string>">

    ...
forTokens语法格式
<c:forTokens
    items="<string>"
    delims="<string>"
    begin="<int>"
    end="<int>"
    step="<int>"
    var="<string>"
    varStatus="<string>">
属性

在这里插入图片描述

forEach实例演示
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<title>c:forEach 标签实例</title>
</head>
<body>
<c:forEach var="i" begin="1" end="5">
   Item <c:out value="${i}"/><p>
</c:forEach>
</body>
</html>

运行结果如下:

Item 1
Item 2
Item 3
Item 4
Item 5
forTokens演示实例
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<title>c:forTokens 标签实例</title>
</head>
<body>
<c:forTokens items="google,runoob,taobao" delims="," var="name">
   <c:out value="${name}"/><p>
</c:forTokens>
</body>
</html>

运行结果如下:

google
runoob
taobao
补充一

c:forEach varStatus 属性

 current: 当前这次迭代的(集合中的)项
 index: 当前这次迭代从 0 开始的迭代索引
 count: 当前这次迭代从 1 开始的迭代计数
 first: 用来表明当前这轮迭代是否为第一次迭代的标志
 last: 用来表明当前这轮迭代是否为最后一次迭代的标志
 begin: 属性值
 end: 属性值
 step: 属性值

例如:<c:forEach items="${sessionScope.userList}" var="userItem" begin="1" end="10" step="3" varStatus="userStatus"> XXX </c:foreach>
实例解读: 对 session 对象存储的 userList 集合对象进行遍历,每次访问的项暂时存储在 userItem 变量中,从索引 1 开始至索引 10 进行访问,但不是依次访问,每隔 3 个元素访问一次。每次访问项的状态相关值由 userStatus 对象暂存。

<c:foreach> 的 varStatus 属性暂存项的相关状态属性,可由 EL 表达式引用。

${userStatus.index} 此项的索引,从0开始 
${userStatus.count} 此项的计数序号,从1开始 
${userStatus.first} 此项是否是第一项,布尔值 
${userStatus.last} 此项是否是最后一项,布尔值 
${userStatus.begin} 此次迭代的起始索引,对应<c:foreach>中begin属性值 
${userStatus.end} 此次迭代的终止索引,对应<c:foreach>中end属性值 
${userStatus.step} 此次迭代的跳跃步伐,对应<c:foreach>中step属性值  
补充二

对这个进行补充:

<c:forEach  items="${sessionScope.userList}"  var="userItem"  begin="1" end="10"  step="3"  varStatus="userStatus"> XXX </c:forEach>

如果说希望直接循环 ${sessionScope.userList} 中的数据,我们就可以不用加 begin 和 end:

<c:forEach  items="${sessionScope.userList}"  var="userItem"  varStatus="userStatus"> ${userItem.键名} </c:forEach>
补充三

JSP页面代码:
main.jsp接收后台Servlet发送过来的数据列表,并将其遍历。

<c:forEach items="${requestScope.netizenList}" var="netizen">
			<tr>
				<td>${netizen.getId()}</td>
				<td>${netizen.getName()}</td>
				<td>${netizen.getPwd()}</td>
				<td>${netizen.getAge()}</td>
				<td>${netizen.getGender()}</td>
			</tr>
</c:forEach>

注解:netizen是一个entity层的实体对象,里面有这五个属性:id,name,pwd,age,gender。
然后有这5个属性的setter、getter方法。

Servlet后台代码:

List<Netizen> netizenList = netizenDao.selectNetizenList();
			request.setAttribute("netizenList",netizenList);
			request.getRequestDispatcher("/main.jsp").forward(request, response);

注解:1、这是request方式请求;2、"/main.jsp"里面的 ‘/’ 不要掉了!

发布了53 篇原创文章 · 获赞 60 · 访问量 4934

猜你喜欢

转载自blog.csdn.net/qq_37717494/article/details/104651692