循环标签
循环本体内容
</c:forEach>
(1)var设定变量名用于存储从集合中取出元素。
(2)items指定要遍历的集合。
(3)varStatus设定变量名,该变量用于存放集合中元素的信息。
(4)begin、end用于指定遍历的起始位置和终止位置(可选)。
(5)step指定循环的步长。
参数类型和相关说明见表1.3.1-1。
表1.3.1-1 循环标签属性说明 名称 | EL | 类型 | 是否必须 | 默认值 |
var | N | String | 是 | 无 |
items | Y | Arrays Collection Iterator Enumeration Map String []args | 是 | 无 |
begin | Y | int | 否 | 0 |
end | Y | int | 否 | 集合中最后一个元素 |
step | Y | int | 否 | 1 |
varStatus | N | String | 否 | 无 |
其中varStatus有4个状态属性(见表 1.3.1-2)。
属性名 | 类型 | 说明 |
index | int | 当前循环的索引值 |
count | int | 循环的次数 |
frist | boolean | 是否为第一个位置 |
last | boolean | 是否为第二个位置 |
【示例代码】:代码9.10实现了遍历的两种方式:设定起始位置、不设定起始位置。同时实现了获得原属的状态信息。
代码1.3.1.1 <c:forEach>标签使用示例:coredemo08.jsp
2 <%@page import="java.util.List"%>
3 <%@page import="java.util.ArrayList"%>
4 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
5 <html>
6 <head>
7 <title>JSTL: -- forEach标签实例</title>
8 </head>
9 <body>
10 <h4><c:out value="forEach实例"/></h4>
11 <hr>
12 <%
13 List<String> a=new ArrayList<String>();
14 a.add("贝贝");
15 a.add("晶晶");
16 a.add("欢欢");
17 a.add("莹莹");
18 a.add("妮妮");
19 request.setAttribute("a",a);
20 %>
21 <B><c:out value="不指定begin和end的迭代:" /></B><br>
22 <c:forEach var="fuwa" items="${a}">
23 <c:out value="${fuwa}"/><br>
24 </c:forEach>
25 <B><c:out value="指定begin和end的迭代:" /></B><br>
26 <c:forEach var="fuwa" items="${a}" begin="1" end="3" step="2">
27 <c:out value="${fuwa}" /><br>
28 </c:forEach>
29 <B><c:out value="输出整个迭代的信息:" /></B><br>
30 <c:forEach var="fuwa" items="${a}" begin="3" end="4" step="1" varStatus="s">
31 <c:out value="${fuwa}" />的四种属性:<br>
32 所在位置,即索引:<c:out value="${s.index}" /><br>
33 总共已迭代的次数:<c:out value="${s.count}" /><br>
34 是否为第一个位置:<c:out value="${s.first}" /><br>
35 是否为最后一个位置:<c:out value="${s.last}" /><br>
36 </c:forEach>
37 </body>
38 </html>
【代码解析】:
(1)第13~18行通过Java脚本创建了一个集合对象a,并添加元素。
(2)第19行使用setAttribute()方法把集合存入request范围内。
(3)第22~24行未指定begin和end属性,直接从集合开始遍历到集合结束为止。
(4)第26~28行指定从集合的第二个(index值为1)元素开始,到第四个(index值为3)元素截止(index的值从0开始)。并指定step为2即每隔两个遍历一次。
(5)第30~35指定varStatus的属性名为s,并取出存储的状态信息。
【程序运行结果】:
forEach实例
不指定begin和end的迭代:
贝贝
晶晶
欢欢
莹莹
妮妮
指定begin和end的迭代:
晶晶
莹莹
输出整个迭代的信息:
莹莹的四种属性:
所在位置,即索引:3
总共已迭代的次数:1
是否为第一个位置:true
是否为最后一个位置:false
妮妮的四种属性:
所在位置,即索引:4
总共已迭代的次数:2
是否为第一个位置:false
是否为最后一个位置:true
(1)从程序运行结果中可以看到不使用begin和end的迭代,从集合的第一个元素开始,遍历到最后一个元素。
(2)指定begin的值为1、end的值为3、step的值为2,从第二个开始首先得到晶晶,每两个遍历一次,则下一个显示的结果为莹莹,end为3则遍历结束。
(3)从指定的begin和end的值来看遍历第四个和第五个,因得到莹莹和妮妮。相关状态信息如图所示。
提示:本例使用的list是在JSP页面中使用Java脚本创建的,是因为JSTL缺少创建集合的功能,在开发中一般不会如此,可通过访问数据库得到数据集合,和通过设定JavaBean的值得到数据集合
(1)items指定被迭代的字符串。
(2)delims指定使用的分隔符。
(3)var指定用来存放遍历到的成员。
(4)begin指定遍历的开始位置(int型从取值0开始)。
(5)end指定遍历结束的位置(int型,默认集合中最后一个元素)。
(6)step遍历的步长(大于0的整型)。
(7)varStatus存放遍历到的成员的状态信息。
【示例代码】:代码 1.3.2 实现了遍历一个有符号的字符串,把指定的符号移除。指定 begin 和 end 值,并获得遍历到的元素的状态信息。代码 1.3.2 <c:forTokens> 标签的示例: coredemo09.jsp
2 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
3 <html>
4 <head>
5 <title>JSTL: -- forTokens标签实例</title>
6 </head>
7 <body>
8 <h4><c:out value="forToken实例"/></h4>
9 <hr>
10 <c:forTokens items="北、京、欢、迎、您" delims="、" var="c1">
11 <c:out value="${c1}"></c:out>
12 </c:forTokens><br>
13 <c:forTokens items="123-4567-8854" delims="-" var="t">
14 <c:out value="${t}"></c:out><br>
15 </c:forTokens><br>
16 <c:forTokens items="1*2*3*4*5*6*7" delims="*" begin="1" end="3" var="n" varStatus="s">
17 <c:out value="${n}" />的四种属性:<br>
18 所在位置,即索引:<c:out value="${s.index}" /><br>
19 总共已迭代的次数:<c:out value="${s.count}" /><br>
20 是否为第一个位置:<c:out value="${s.first}" /><br>
21 是否为最后一个位置:<c:out value="${s.last}" /><br>
22 </c:forTokens>
23 </body>
24 </html>
forToken实例
北 京 欢 迎 您
123
4567
8854
2的四种属性:
所在位置,即索引:1
总共已迭代的次数:1
是否为第一个位置:true
是否为最后一个位置:false
3的四种属性:
所在位置,即索引:2
总共已迭代的次数:2
是否为第一个位置:false
是否为最后一个位置:false
4的四种属性:
所在位置,即索引:3
总共已迭代的次数:3
是否为第一个位置:false
是否为最后一个位置:true
<c:forToken>的属性varStatus的使用同<c:forEach>的使用方法相同,在此就再不表述。