学科分类
目录
Java Web

<c:forEach>标签

​ 在JSP页面中,经常需要对集合对象进行循环迭代操作,为此,Core标签库提供了一个<c:forEach>标签,该标签专门用于迭代集合对象中的元素,如Set、List、Map、数组等,并且能重复执行标签体中的内容,它有两种语法格式,具体如下:

​ 语法1:迭代包含多个对象的集合

<c:forEach [var="varName"] items="collection" [varStatus="varStatusName"]

[begin="begin"] [end="end"] [step="step"]>

  body content

</c:forEach>

​ 语法2:迭代指定范围内的集合

<c:forEach [var="varName"] [varStatus="varStatusName"] begin="begin" 

end="end" [step="step"]>

  body content

</c:forEach>

在上述语法格式中,可以看到<c:forEach>标签有多个属性。接下来将针对这些属性进行讲解,具体如下:

● var属性用于指将当前迭代到的元素保存到page域中的名称;

● items属性用于指定将要迭代的集合对象;

● varStatus用于指定当前迭代状态信息的对象保存到page域中的名称;

● begin属性用于指定从集合中第几个元素开始进行迭代,begin的索引值从0开始,如果没有指定items属性,就从begin指定的值开始迭代,直到迭代结束为止;

● step属性用于指定迭代的步长,即迭代因子的增量。

<c:forEach>标签在程序开发中经常会被用到,因此熟练掌握<c:forEach>标签是很有必要的,接下来,通过几个具体的案例来学习<c:forEach>标签的使用,具体如下:

1、使用标签迭代数组

为了使用<c:foreach>标签迭代数组,首先需要在数组中添加几个元素,然后将这个数组赋值给<c:foreach>标签的items属性,如例1所示。

例1 c_foreach1.jsp

 1  <%@ page language="java" contentType="text/html; charset=utf-8"

 2  pageEncoding="utf-8" import="java.util.*"%>

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

 4  <html>

 5  <head></head>

 6  <body>

 7    <%

 8      String [] fruits={"apple","orange","grape","banana"};

 9    %>

 10   String数组中的元素:<br>

 11   <c:forEach var="name" items="<%=fruits%>">

 12     ${name}<br>

 13   </c:forEach>

 14 </body>

 15 </html>

打开IE浏览器,在地址栏中输入http://localhost:8080/chapter08/c_foreach1.jsp访问c_ foreach1.jsp页面,此时,浏览器窗口中显示的结果如图1所示。

图1 c_foreach1.jsp

从图1可以看出,在String数组中存入的元素apple、orange、grape和banana全部被打印出来了,因此可以说明使用<c:forEach>标签可以迭代数组中的元素。

2、使用标签迭代Map集合

​ 在迭代Map类型的集合时,迭代出的每个元素的类型都为Map.Entry,Map.Entry代表Map集合中的一个条目项,其中getKey()方法可获得到条目项的关键字,getValue()方法可获得条目项的值,接下来通过一个案例来演示如何迭代Map集合中的元素,如例2所示。

例2 c_foreach2.jsp

 1  <%@ page language="java" contentType="text/html; charset=utf-8"

 2  pageEncoding="utf-8" import="java.util.*"%>

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

 4  <html>

 5  <head></head>

 6  <body>

 7    <%

 8      Map userMap = new HashMap();

 9      userMap.put("Tom", "123");

 10     userMap.put("Make","123");

 11     userMap.put("Lina","123");

 12   %>

 13   HashMap集合中的元素:<br>

 14   <c:forEach var="entry" items="<%=userMap%>">

 15     ${entry.key}&nbsp;${entry.value}<br>

 16   </c:forEach>

 17 </body>

 18 </html>

打开IE浏览器,在地址栏中输入http://localhost:8080/chapter08/c_foreach2.jsp访问c_ foreach2.jsp页面,此时,浏览器窗口中显示的结果如图2所示。

图2 c_ foreach2.jsp

从图2可以看出,Map集合中存入的用户名和密码全部被打印出来了。在使用<c:forEach>标签时,只需将userMap集合对象赋值给items属性,之后通过entry变量就可以获取到集合中的键和值。

3、使用标签指定迭代集合对象的范围和步长

<c:forEach>标签的begin、end和step属性分别用于指定循环的起始索引、结束索引和步长。使用这些属性可以迭代集合对象中某一范围内的元素,如例3所示。

例3 c_foreach3.jsp

 1  <%@ page language="java" contentType="text/html; charset=utf-8"

 2  pageEncoding="utf-8" import="java.util.*"%>

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

 4  <html>

 5  <head></head>

 6  <body>

 7   colorsList集合(指定迭代范围和步长)<br>

 8    <%

 9      List colorsList=new ArrayList();

 10     colorsList.add("red");

 11     colorsList.add("yellow");

 12     colorsList.add("blue");

 13     colorsList.add("green");

 14     colorsList.add("black");

 15   %>

 16   <c:forEach var="color" items="<%=colorsList%>" begin="1" 

 17    end="3" step="2">

 18     ${color}&nbsp;

 19   </c:forEach>

 20 </body>

 21 </html>

打开IE浏览器,在地址栏中输入http://localhost:8080/chapter08/c_foreach3.jsp访问c_ foreach3.jsp页面,此时,浏览器窗口中显示的结果如图3所示。

图3 c_ foreach3.jsp

从图3可以看出,浏览器窗口中显示了colorsList集合中的yellow和green两个元素,只显示这两个元素的原因是,在使用<c:forEach>标签迭代List集合时,指定了迭代的起始索引为1,当迭代集合时首先会输出yellow元素,由于在<c:foreach>标签中指定了步长为2,并且指定了迭代的结束索引为3,因此,还会输出集合中的green元素,其它的元素不会再输出。

4、使用标签获取迭代集合中元素的状态信息

​ <c:foreach>标签的varStatus属性用于设置一个javax.servlet.jsp.jstl.core.LoopTagStatus类型的变量,这个变量包含了从集合中取出元素的状态信息。使用<c:foreach>标签的varStatus属性可以获取以下信息:

● count:表示元素在集合中的序号,从1开始计数;

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

● first:表示当前是否为集合中的第一个元素;

● last:表示当前是否为集合中的最后一个元素;

通过上面的讲解,大家对<c:forEach>标签的varStatus属性有了基本的了解,接下来通过一个具体的案例来演示如何使用<c:foreach>标签的varStatus属性获取集合中元素的状态信息,如例4所示。

例4 c_foreach4.jsp

 1  <%@ page language="java" contentType="text/html; charset=utf-8"

 2  pageEncoding="utf-8" import="java.util.*"%>

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

 4  <html>

 5  <head></head>

 6  <body style="text-align: center;">

 7    <%

 8      List userList = new ArrayList();

 9      userList.add("Tom");

 10     userList.add("Make");

 11     userList.add("Lina");

 12   %>

 13   <table border="1">

 14     <tr>

 15       <td>序号</td>

 16       <td>索引</td>

 17       <td>是否为第一个元素</td>

 18       <td>是否为最后一个元素</td>

 19       <td>元素的值</td>

 20     </tr>

 21     <c:forEach var="name" items="<%=userList%>" varStatus="status">

 22       <tr>

 23         <td>${status.count}</td>

 24         <td>${status.index}</td>

 25         <td>${status.first}</td>

 26         <td>${status.last}</td>

 27         <td>${name}</td>

 28       </tr>

 29     </c:forEach>

 30   </table>

 31 </body>

 32 </html>

打开IE浏览器,在地址栏中输入http://localhost:8080/chapter08/c_foreach4.jsp访问c_ foreach4.jsp页面,此时,浏览器窗口中显示的结果如图4所示。

图4 c_ foreach4.jsp

从图4可以看出,使用<c:forEach>标签在迭代集合中的元素时,可以通过varStatus属性获取集合中元素的序号和索引,而且还可以判断集合中的元素是否为第一个元素以及最后一个元素。因此可以说明使用该属性可以很方便的获取集合中元素的状态信息。

点击此处
隐藏目录