<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 雲深不知去