在使用JSTL的核心标签库forEach之前,首先需要在JSP中通过taglib指令引入核心标签库:



<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>


一、基本使用



标签用于遍历集合中的对象,并能重复执行标签主体内容。它的基本用法如下所示:





主体内容





标签每次从items的集合中取出一个元素,并把它存放在只能标签内部才能访问的范围中,并用var的取值作为引用名称,通过该名称可以在标签主体内访问当前遍历的元素。



例如下方代码创建了一个List集合,然后通过



遍历集合,并把集合中的元素打印到页面上:



运行以上代码,得到的显示结果为“Itcast Itheima”。以上标签代码等价于以下Java程序片段:



第一段和第三段Java程序片段完成标签的任务,即在每一次循环中,从list中取出一个元素,把它作为e命名变量存在页面范围内,接着执行标签的主体内容,然后从页面范围内删除该变量,从而确保只有标签主体内容才能访问e变量。


二、标签的varStatus属性



varStatus属性用于指定一个变量,引用一个javax.servlet.jsp.jstl.core.LoopTagStatus类型的对象,该对象只能在标签内部通过指定的变量名称来访问,它包含了从集合中取出的当前元素的状态信息。



count:当前元素在集合中的序号,从1开始计数。



index:当前元素在集合中的索引,从0开始计数。



first:当前元素是否是集合中的第一个元素。



last:当前元素是否是集合中的最后一个元素。



以下代码演示了使用了varStatus属性的标签:



以上代码的展现结果如下图所示:



三、标签的begin、end和step属性


bengin属性:指定循环的起始索引。



end属性:指定循环的结束索引。



step属性:指定步长。



以下代码用于循环遍历List集合,输出索引从1到4的元素:



以上代码的打印结果为“index1 index2 index3 index4”。


如果没有为标签设置items属性,那么就直接把每次循环的索引赋值给var指定的命名变量。如下打印的结果为"1 3 5 7 9"



四、标签可以遍历的对象

可以遍历的对象包括:

java.util.set、java.util.List、java.util.Map、java.util.Iterator和java.util.Enumeration接口的实现类。

Java数组。

以逗号分隔的字符串。

以下代码遍历Map类型的集合:

打印结果为:

k3:ccccc

k1:aaaaa

k2:bbbbb

以下代码遍历Java数组:

打印结果为:s1 s2 s3

以下遍历访问字符串"aaa,bbb,ccc"中被逗号分隔的字符串:

打印结果为:aaa bbb ccc