JSP JSTL <c:forEach>標籤:對物件進行疊代輸出標籤

2020-07-16 10:04:58
<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 雲深不知去