首页 > 编程笔记 > Java笔记

JSP JSTL <c:forEach>标签:对对象进行迭代输出标签

<c:forEach> 标签可以根据循环条件遍历数组和集合类中的所有或部分数据。例如,在使用 Hibernate 技术访问数据库时,返回的都是数组、java.util.List 和 java.util.Map 对象,它们封装着从数据库中查询得出的数据,这些数据是 JSP 页面需要的。如果在 JSP 页面中使用 Java 代码来循环遍历所有数据,会使页面非常混乱,不易分析和维护。使用 JSTL 的 <c:forEach> 标签循环显示这些数据可以解决 JSP 页面混乱的问题,同时也提高了代码的可维护性。

语法:

<c:forEach items="data" var="name" begin="start" end="finish" step="step" varStatus="statusName">
  ……标签体
</c:forEach>

<c:forEach> 标签中的属性都是可选项,可以根据需要使用相应的属性。<c:forEach> 标签各属性的详细介绍如表所示。

<c:forEach> 标签属性
属性 类型 描述 引用 EL
items 数组、集合类、字符串和枚举类型 被循环遍历的对象,多用于数组与集合类 可以
var String 循环体的变量,用于存储items指定对象的成员 不可以
begin int 循环的起始位置 可以
end int 循环的终止位置 可以
step int 循环的步长 可以
varStatus String 循环的状态变量 不可以


在上表的属性中,varStatus 属性又包括下表所示的 4 个当前循环体的状态属性。

varStatus 属性的 4 个状态属性
属性 类型 说明
index int 当前循环的索引值
count int 循环总数
first boolean 是否为第一循环
last boolean 是否为最后一次循环


示例

应用 <c:forEach> 标签遍历一个 java.util.List 集合对象,并将其显示在 JSP 页面中,关键代码如下:
<%@page import="java.util.*"%>
  <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    <%
      List<String>list = new ArrayList<String>();  //添加集合元素
        list.add("表达式标签");
        list.add("流程控制标签");
        list.add("循环标签");
        list.add("URL操作");
        request.setAttribute("data",list);
    %>
    List集合类中包含了JSTL核心标签库的4种标签名。<br>
    利用&lt;c:forEach&gt;标签遍历其结果如下:
    <br>
    <c:forEach items="${data}" var="tag" varStatus="id">
      ${id.count}&nbsp;${tag}<br>
    </c:forEach>
运行结果如下:
List集合类中包含了JSTL标签库的4种签名。
利用<c:forEach>标签遍历其结果如下:
1 表达式标签
2 流程控制标签
3 循环标签
4 URL操作

典型应用

本示例使用 JSTL 标签中的 <c:forEach> 标签遍历 List 集合中的元素,代码如下:
<body>
  <%
    List<String>list = new ArrayList<String>();  //创建List集合对象
      list.add("松下问童子");  //添加List中的元素
      list.add("言师采药去");
      list.add("只在此山中");
      list.add("云深不知处");
      request.setAttribute("list",list);  //将List集合保存到request对象中
  %>
  <table align="center" cellpadding="0" cellspacing="0" border="2" bgcolor="lightblue">
    <Tr>
      <Td><b>遍历List集合的全部元素:</b><br>
        <c:forEach items="${requestScope.list}" var="keyvalue" varStatus="id">
          ${id.index}&nbsp;${keyvalue}<br>
        </c:forEach>
      </Td>
    </Tr>
    <Tr>
      <td><b>遍历List中所有的元素输出第一个和最后一句:</b><br>
        <c:forEach items="${requestScope.list}" var="keyvalue" varStatus="id" begin="0" step="3">
          ${id.index}&nbsp;${keyvalue}<br>
        </c:forEach>
      </td>
    </Tr>
  </table>
运行结果如下:
遍历List集合的全部元素:
0 松下问童子
1 言师采药去
2 旨在从山中
3 云深不知去
遍历List中所有的元素输出第一句和最后一句:
0 松下问童子
3 云深不知去

所有教程

优秀文章