JSTL标签库学习笔记 四、核心标签库的循环标签

来源:互联网 发布:网络脆弱性扫描 编辑:程序博客网 时间:2024/06/05 11:22

循环标签

循环标签主要实现迭代操作。主要包含两个标签:<c:forEach><c:forTokens>标签,接下来将详细介绍这两个标签的用法。

1.3.1、<c:forEach>标签
【功能】:该标签根据循环条件遍历集合(Collection)中的元素。
【语法】:
<c:forEach var=”name” items=”Collection” varStatus=”StatusName” begin=”begin” end=”end” step=”step”>
循环本体内容
</c:forEach>

【参数解析】:

1var设定变量名用于存储从集合中取出元素。

2items指定要遍历的集合。

3varStatus设定变量名,该变量用于存放集合中元素的信息。    

4beginend用于指定遍历的起始位置和终止位置(可选)。

5step指定循环的步长。

参数类型和相关说明见表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)。
1.3.1-2 varStatus的4个状态

属性名

类型

说明

index

int

当前循环的索引值

count

int

循环的次数

frist

boolean

是否为第一个位置

last

boolean

是否为第二个位置


【示例代码】:代码9.10实现了遍历的两种方式:设定起始位置、不设定起始位置。同时实现了获得原属的状态信息。
代码1.3.1.1 <c:forEach>标签使用示例:coredemo08.jsp
1     <%@ page contentType="text/html;charset=GBK" %>
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             &nbsp;<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              &nbsp;<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              &nbsp;<c:out value="${fuwa}" />的四种属性:<br>
32              &nbsp;&nbsp;所在位置,即索引:<c:out value="${s.index}" /><br>
33              &nbsp;&nbsp;总共已迭代的次数:<c:out value="${s.count}" /><br>
34              &nbsp;&nbsp;是否为第一个位置:<c:out value="${s.first}" /><br>
35              &nbsp;&nbsp;是否为最后一个位置:<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行未指定beginend属性,直接从集合开始遍历到集合结束为止。

4)第26~28行指定从集合的第二个(index值为1)元素开始,到第四个(index值为3)元素截止(index的值从0开始)。并指定step2即每隔两个遍历一次。

5)第30~35指定varStatus的属性名为s,并取出存储的状态信息。

程序运行结果】:

forEach实例


不指定begin和end的迭代:
 贝贝
 晶晶
 欢欢
 莹莹
 妮妮
指定begin和end的迭代:
 晶晶
 莹莹
输出整个迭代的信息:
 莹莹的四种属性:
  所在位置,即索引:3
  总共已迭代的次数:1
  是否为第一个位置:true
  是否为最后一个位置:false
 妮妮的四种属性:
  所在位置,即索引:4
  总共已迭代的次数:2
  是否为第一个位置:false
  是否为最后一个位置:true


【总结】:

1)从程序运行结果中可以看到不使用beginend的迭代,从集合的第一个元素开始,遍历到最后一个元素。

2)指定begin的值为1end的值为3step的值为2,从第二个开始首先得到晶晶,每两个遍历一次,则下一个显示的结果为莹莹,end3则遍历结束。

3)从指定的beginend的值来看遍历第四个和第五个,因得到莹莹和妮妮。相关状态信息如图所示。

提示:本例使用的list是在JSP页面中使用Java脚本创建的,是因为JSTL缺少创建集合的功能,在开发中一般不会如此,可通过访问数据库得到数据集合,和通过设定JavaBean的值得到数据集合


1.3.2、<c:forTokens>标签

【功能】:该标签用于浏览字符串,并根据指定的字符将字符串截取。
【语法】:
<c:forTokens items=”strigOfTokens” delims=””delimiters [var=”name” begin=”begin” end=”end” step=”len” varStatus=”statusName”] >
【参数说明】

1items指定被迭代的字符串。

2delims指定使用的分隔符。

3var指定用来存放遍历到的成员。

4begin指定遍历的开始位置(int型从取值0开始)。

5end指定遍历结束的位置(int型,默认集合中最后一个元素)。

6step遍历的步长(大于0的整型)。

7varStatus存放遍历到的成员的状态信息。

【示例代码】:代码1.3.2实现了遍历一个有符号的字符串,把指定的符号移除。指定beginend值,并获得遍历到的元素的状态信息。
代码1.3.2 <c:forTokens>标签的示例:coredemo09.jsp
1     <%@ page contentType="text/html;charset=GBK" %>
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              &nbsp;<c:out value="${n}" />的四种属性:<br>
18              &nbsp;&nbsp;所在位置,即索引:<c:out value="${s.index}" /><br>
19              &nbsp;&nbsp;总共已迭代的次数:<c:out value="${s.count}" /><br>
20              &nbsp;&nbsp;是否为第一个位置:<c:out value="${s.first}" /><br>
21              &nbsp;&nbsp;是否为最后一个位置:<c:out value="${s.last}" /><br>
22     </c:forTokens>
23    </body>
24     </html>
【代码解析】:
1)本示例共实现了3<c:forToken>循环,10~12行第一个循环实现了遍历给定字符串“北、京、欢、迎、您”,并除去循环中遇到的“、”号。
213~15行第2个循环遍历一串带有分隔符的电话号码,不读取分隔符号,将显示一个字符串。
316~22行第3个循环遍历一个带“*”号的字符串,根据指定的起始位置把元素取出,并显示每个元素的状态信息。

提示:分隔符的作用是根据标识,截取字符串。如果未设定分隔符或在字符串中没有找到分隔付,将把整个元素作为一个元素截取。
在实际应用中用于在除去某些符号在页面中显示。

程序运行结果】:

forToken实例


北 京 欢 迎 您
123
4567
8854

 2的四种属性:
  所在位置,即索引:1
  总共已迭代的次数:1
  是否为第一个位置:true
  是否为最后一个位置:false
 3的四种属性:
  所在位置,即索引:2
  总共已迭代的次数:2
  是否为第一个位置:false
  是否为最后一个位置:false
 4的四种属性:
  所在位置,即索引:3
  总共已迭代的次数:3
  是否为第一个位置:false
  是否为最后一个位置:true


<c:forToken>的属性varStatus的使用同<c:forEach>的使用方法相同,在此就再不表述。
原创粉丝点击