<c:forEach>, <c:forTokens> 标签
这些标签封装了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>">
属性
<c:forEach>标签有如下属性:
| 属性 | 描述 | 是否必要 | 默认值 |
|---|---|---|---|
| items | 要被循环的信息 | 否 | 无 |
| begin | 开始的元素(0=第一个元素,1=第二个元素) | 否 | 0 |
| end | 最后一个元素(0=第一个元素,1=第二个元素) | 否 | Last element |
| step | 每一次迭代的步长 | 否 | 1 |
| var | 代表当前条目的变量名称 | 否 | 无 |
| varStatus | 代表循环状态的变量名称 | 否 | 无 |
<c:forTokens>标签与<c:forEach>标签有相似的属性,不过<c:forTokens>还有另一个属性:
| 属性 | 描述 | 是否必要 | 默认值 |
|---|---|---|---|
| delims | 分隔符 | 是 | 无 |
<c: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
<c: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
JSP 标准标签库
西瓜
Yut***8@163.com
c:forEach varStatus 属性
例如:
<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属性值西瓜
Yut***8@163.com
小明的同学
184***3070@qq.com
对这个进行补充:
<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>小明的同学
184***3070@qq.com