<c:forEach>, <c:forTokens> 标签

这些标签封装了Java中的for,while,do-while循环。

相比而言,<c:forEach>标签是更加通用的标签,因为它迭代一个集合中的对象。

<c:forTokens>标签通过指定分隔符将字符串分隔为一个数组然后迭代它们。

forEach 语法格式

  1. <c:forEach
  2. items="<object>"
  3. begin="<int>"
  4. end="<int>"
  5. step="<int>"
  6. var="<string>"
  7. varStatus="<string>">
  8.  
  9. ...

forTokens 语法格式

  1. <c:forTokens
  2. items="<string>"
  3. delims="<string>"
  4. begin="<int>"
  5. end="<int>"
  6. step="<int>"
  7. var="<string>"
  8. 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>实例演示

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

运行结果如下:

  1. Item 1
  2. Item 2
  3. Item 3
  4. Item 4
  5. Item 5

<c:forTokens>演示实例

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

运行结果如下:

  1. google
  2. baidu
  3. taobao

c:forEach varStatus 属性

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

例如:

  1. <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 对象暂存。

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

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

对这个进行补充:

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

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

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