簡介
語法
語法1:疊代一集合對象之所有成員
<c:forEach [var="varName"] items="collection" [varStatus="varStatusName"]
[begin="begin"] [end="end"] [step="step"]>
</c:forEach>
本體內容
</c:forEach>
語法2:疊代指定的次數
<c:forEach [var="varName"] [varStatus="varStatusName"] begin="begin" end="end" [step="step"]>
</c:forEach>
屬性
·var:疊代參數的名稱。在疊代體中可以使用的變數的名稱,用來表示每一個疊代變數。類型為String。
·items:要進行疊代的集合。
·varStatus:疊代變數的名稱,用來表示疊代的狀態,可以訪問到疊代自身的信息。
·begin:如果指定了items,那么疊代就從items[begin]開始進行疊代;如果沒有指定items,那么就從begin開 始疊代。它的類型為整數。
·end:如果指定了items,那么就在items[end]結束疊代;如果沒有指定items,那么就在end結束疊代。它的類 型也為整數。
·step:疊代的步長。
·current:當前這次疊代的(集合中的)項。
·index:當前這次疊代從0開始的疊代索引。
·count:當前這次疊代從1開始的疊代計數。
·first:用來表明當前這輪疊代是否為第一次疊代,該屬性為boolean類型。
·last:用來表明當前這輪疊代是否為最後一次疊代,該屬性為boolean類型。
·begin:begin屬性的值。
·end:end屬性的值
·step:step屬性的值
限制
·假若有begin屬性時,begin必須大於等於 0
·假若有end屬性時,必須大於等於begin
·假若有step屬性時,step必須大於等於0
Null 和 錯誤處理
·假若items為null時,則表示為一空的集合對象
·假若begin大於或等於items時,則疊代不運算
說明
如果要循序瀏覽一個集合對象,並將它的內容顯示出來,就必須有items屬性。
items支持的類型包括:
·java.util.Collection:調用iterator()來獲得的元素。
·java.util.Map:通過java.util.Map.Entry所獲得的實例。
·java.util.Iterator:疊代器元素。
·java.util.Enumeration:枚舉元素。
·Object實例數組:數組元素。
·基本類型值數組:經過包裝的數組元素。
·用逗號定界的String:分割後的子字元串。
·javax.servlet.jsp.jstl.sql.Result:SQL查詢所獲得的行。
範例
下面的範例 Core_forEach.jsp是將數組中的成員一個個顯示出來的:
Core_forEach.jsp
<%@ page contentType="text/html;charset=GB2312 " %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>CH7 - Core_forEach.jsp</title>
</head>
<body>
<h2><c:out value="<c:forEach> 的用法" /></h2>
<%
String atts[] = new String [5];
atts[0]="hello";
atts[1]="this";
atts[2]="is";
atts[3]="a";
atts[4]="pen";
request.setAttribute("atts", atts);
%>
<c:forEach items="${atts}" var="item" >
${item}</br>
</c:forEach>
</body>
</html>
在上述範例中,筆者先產生一個字元串數組,然後將此數組atts儲存至Request的屬性範圍中,再用<c:forEach>將它循序瀏覽一遍。這裡items表示被瀏覽的集合對象,var用來存放指定的集合對象中成員,最後使用<c:out>將item的內容顯示出來,執行結果如圖-8所示。
注意
varName的範圍只存在<c:forEach>的本體中,如果超出了本體,則不能再取得varName的值。上個例子中,若${item} 是在</c:forEach>之後執行時,如:
<c:forEach items="${atts}" var="item" >
</c:forEach>
${item}</br>
${item}則不會顯示item的內容。
<c:forEach>除了支持數組之外,還有標準J2SE的集合類型,例如:ArrayList、List、LinkedList、Vector、Stack和Set 等等;另外還包括java.util.Map類的對象,例如:HashMap、Hashtable、Properties、Provider和Attributes。
<c:forEach>還有begin、end和step這三種屬性:begin主要用來設定在集合對象中開始的位置(注意:第一個位置為0);end用來設定結束的位置;而step則是用來設定現在指到的成員和下一個將被指到成員之間的間隔。我們將之前的範例改成如下:
Core_forEach1.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>CH7 - Core_forEach1.jsp</title>
</head>
<body>
<h2><c:out value="<c:forEach> begin、end和step的用法" /></h2>
<%String atts[] = new String [5];
atts[0]="hello";
atts[1]="this";
atts[2]="is";
atts[3]="a";
atts[4]="pen";
request.setAttribute("atts", atts);
%>
<c:forEach items="${atts}" var="item" begin="1" end="4" step="2" >
${item}</br>
</c:forEach>
</body>
</html>
<c:forEach>中指定的集合對象atts將會從第2個成員開始到第5個成員,並且每執行一次循環都會間隔一個成員瀏覽。因此結果是只顯示atts[1]和atts[3]的內容,如圖7-9所示。
特別注意:直接是使用不了的,需要導入兩個包
jstl-1.2-sources.jar
jstl-1.2.jar
(就是jstl和standard這兩個包)
不導入運行會報錯~~~提醒大家~~~