為循環控制,它可以將集合(Collection)中的成員循序瀏覽一遍。運作方式為當條件符合時,就會持續重複執行的本體內容。

簡介

語法

語法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這兩個包)

不導入運行會報錯~~~提醒大家~~~

相關詞條

熱門詞條

聯絡我們