<c:set>標(biāo)簽用于為變量或JavaBean中的變量屬性賦值的工作。它的屬性和描述如表9.4所示:
表9.4 <c:set>標(biāo)簽屬性和說(shuō)明
屬性
描述
value
值的信息,可以是EL表達(dá)式或常量
target
被賦值的JavaBean實(shí)例的名稱,若存在該屬性則必須存在property屬性(可選)
property
JavaBean實(shí)例的變量屬性名稱(可選)
var
被賦值的變量名(可選)
scope
變量的作用范圍,若沒有指定,默認(rèn)為page(可選)
當(dāng)不存在value的屬性時(shí),將以包含在標(biāo)簽內(nèi)的實(shí)體數(shù)據(jù)作為賦值的內(nèi)容。下面看一個(gè)示例:
<c:set value="this is andy" var="oneString"/>
${oneString} <br>
該示例將為名為“oneString”的變量賦值為“this is andy”,其作用范圍為page。
用于刪除的<c:remove>標(biāo)簽
<c:remove>標(biāo)簽用于刪除存在于scope中的變量。它的屬性和描述如表9.5所示:
表9.5 <c:remove>標(biāo)簽屬性和說(shuō)明
屬性
描述
var
需要被刪除的變量名
scope
變量的作用范圍,若沒有指定,默認(rèn)為全部查找(可選)
下面看一個(gè)示例:
<c:remove var="sampleValue" scope="session"/>
${sessionScope.sampleValue} <br>
該示例將存在于Session中名為“sampleValue”的變量刪除。下一句EL表達(dá)式顯示該變量時(shí),該變量已經(jīng)不存在了。
用于異常捕獲的<c:catch>標(biāo)簽
<c:catch>標(biāo)簽允許在JSP頁(yè)面中捕捉異常。它包含一個(gè)var屬性,是一個(gè)描述異常的變量,改變量可選。若沒有var屬性的定義,那么僅僅捕捉異常而不做任何事情,若定義了var屬性,則可以利用var所定義的異常變量進(jìn)行判斷轉(zhuǎn)發(fā)到其他頁(yè)面或提示報(bào)錯(cuò)信息??匆粋€(gè)示例。
<c:catch var="err">
${param.sampleSingleValue[9] == 3}
</c:catch>
${err}
當(dāng)“${param.sampleSingleValue[9] == 3}”表達(dá)式有異常時(shí),可以從var屬性“err”得到異常的內(nèi)容,通常判斷“err”是否為null來(lái)決定錯(cuò)誤信息的提示。
用于判斷的<c:if>標(biāo)簽
<c:if>標(biāo)簽用于簡(jiǎn)單的條件語(yǔ)句。它的屬性和描述如表9.6所示:
表9.6 <c:if>標(biāo)簽屬性和說(shuō)明
屬性
描述
test
需要判斷的條件
var
保存判斷結(jié)果true或false的變量名,該變量可供之后的工作使用(可選)
scope
變量的作用范圍,若沒有指定,默認(rèn)為保存于page范圍中的變量(可選)
下面看一個(gè)示例:
<c:if test="${paramValues.sampleValue[2] == 12}" var="visits">
It is 12
</c:if><br>
${visits} <br>
該示例將判斷request請(qǐng)求提交的傳入控件數(shù)組參數(shù)中,下標(biāo)為“2”的控件內(nèi)容是否為“12”,若為12則顯示“It is 12”。判斷結(jié)果被保存在page范圍中的“visits”變量中。
用于復(fù)雜判斷的<c:choose>、<c:when>、<c:otherwise>標(biāo)簽
這三個(gè)標(biāo)簽用于實(shí)現(xiàn)復(fù)雜條件判斷語(yǔ)句,類似“if,elseif”的條件語(yǔ)句。
q <c:choose>標(biāo)簽沒有屬性,可以被認(rèn)為是父標(biāo)簽,<c:when>、<c:otherwise>將作為其子標(biāo)簽來(lái)使用。
q <c:when>標(biāo)簽等價(jià)于“if”語(yǔ)句,它包含一個(gè)test屬性,該屬性表示需要判斷的條件。
q <c:otherwise>標(biāo)簽沒有屬性,它等價(jià)于“else”語(yǔ)句。
下面看一個(gè)復(fù)雜條件語(yǔ)句的示例。
<c:choose>
<c:when test="${paramValues.sampleValue[2] == 11}">
not 12 not 13,it is 11
</c:when>
<c:when test="${paramValues.sampleValue[2] == 12}">
not 11 not 13,it is 12
</c:when>
<c:when test="${paramValues.sampleValue[2] == 13}">
not 11 not 12,it is 13
</c:when>
<c:otherwise>
not 11 、12、13
</c:otherwise>
</c:choose>
該示例將判斷request請(qǐng)求提交的傳入控件數(shù)組參數(shù)中,下標(biāo)為“2”控件內(nèi)容是否為“11”或“12”或“13”,并根據(jù)判斷結(jié)果顯示各自的語(yǔ)句,若都不是則顯示“not 11 、12、13”。
用于循環(huán)的<c:forEach>標(biāo)簽
<c:forEach>為循環(huán)控制標(biāo)簽。它的屬性和描述如表9.7所示:
表9.7 <c:forEach>標(biāo)簽屬性和說(shuō)明
屬性
描述
items
進(jìn)行循環(huán)的集合(可選)
begin
開始條件(可選)
end
結(jié)束條件(可選)
step
循環(huán)的步長(zhǎng),默認(rèn)為1(可選)
var
做循環(huán)的對(duì)象變量名,若存在items屬性,則表示循環(huán)集合中對(duì)象的變量名(可選)
varStatus
顯示循環(huán)狀態(tài)的變量(可選)
下面看一個(gè)集合循環(huán)的示例。
<%ArrayList arrayList = new ArrayList();
arrayList.add("aa");
arrayList.add("bb");
arrayList.add("cc");
%>
<%request.getSession().setAttribute("arrayList", arrayList);%>
<c:forEach items="${sessionScope.arrayList}" var="arrayListI">
${arrayListI}
</c:forEach>
該示例將保存在Session中的名為“arrayList”的ArrayList類型集合參數(shù)中的對(duì)象依次讀取出來(lái),items屬性指向了ArrayList類型集合參數(shù),var屬性定義了一個(gè)新的變量來(lái)接收集合中的對(duì)象。最后直接通過(guò)EL表達(dá)式顯示在頁(yè)面上。下面看一個(gè)簡(jiǎn)單循環(huán)的示例。
<c:forEach var="i" begin="1" end="10" step="1">
${i}<br />
</c:forEach>
該從“1”循環(huán)到“10”,并將循環(huán)中變量“i”顯示在頁(yè)面上。
用于分隔字符的<c:forTokens>標(biāo)簽
<c:forTokens>標(biāo)簽可以根據(jù)某個(gè)分隔符分隔指定字符串,相當(dāng)于java.util.StringTokenizer類。它的屬性和描述如表9.8所示:
表9.8 <c:forTokens>屬性和說(shuō)明
屬性
描述
items
進(jìn)行分隔的EL表達(dá)式或常量
delims
分隔符
begin
開始條件(可選)
end
結(jié)束條件(可選)
step
循環(huán)的步長(zhǎng),默認(rèn)為1(可選)
var
做循環(huán)的對(duì)象變量名(可選)
varStatus
顯示循環(huán)狀態(tài)的變量(可選)
下面看一個(gè)示例。
<c:forTokens items="aa,bb,cc,dd" begin="0" end="2" step="2" delims="," var="aValue">
${aValue}
</c:forTokens>
需要分隔的字符串為“aa,bb,cc,dd”,為“,”。begin指定從第一個(gè)“,”開始分隔,end屬性指定分隔到第三個(gè)“,”,并將做循環(huán)的名指定為“aValue”。由于步長(zhǎng)為“2”,使用EL${aValue}只能顯示“aa cc”。