您的位置:首页 > Web前端 > JavaScript

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

2016-09-22 09:15 344 查看


循环标签

循环标签主要实现迭代操作。主要包含两个标签:<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>

【参数解析】:

(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)。

表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              <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.3.2、<c:forTokens>标签

【功能】:该标签用于浏览字符串,并根据指定的字符将字符串截取。

【语法】:

<c:forTokens items=”strigOfTokens” delims=””delimiters
[var=”name” begin=”begin” end=”end” step=”len” varStatus=”statusName”] >

【参数说明】

(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

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               <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>

【代码解析】:

(1)本示例共实现了3个<c:forToken>循环,10~12行第一个循环实现了遍历给定字符串“北、京、欢、迎、您”,并除去循环中遇到的“、”号。

(2)13~15行第2个循环遍历一串带有分隔符的电话号码,不读取分隔符号,将显示一个字符串。

(3)16~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>的使用方法相同,在此就再不表述。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: