標籤:jstl
5.1、下載JSTL
http://jstl.java.net
5.2、JSTL類庫
類別 |
下屬功能 |
URI |
首碼 |
Core |
變數支援 |
http://java.sun.com/jsp/jstl/core |
c |
流向控制 |
URL管理 |
雜項 |
XML |
Core |
http://java.sun.com/jsp/jstl/xml |
x |
流向控制 |
轉換 |
I18n |
語言環境 |
http://java.sun.com/jsp/jstl/fmt |
fmt |
訊息格式化 |
數字和日期格式化 |
資料庫 |
SQL |
http://java.sun.com/jsp/jstl/sql |
sql |
功能 |
集合長度 |
http://java.sun.com/jsp/jstl/functions |
fn |
字串操作 |
為了在JSP頁面中使用JSTL類庫,必須以下列格式使用taglib指令:
<%@ taglib uri=”uri” prefix=”prefix”%>
例如,為了使用Core類庫,必須在JSP頁面開頭處這樣聲明:
<%@ taglib uri=”http://java.sun.com/jsp/jstl/core” prefix=”c”%>
5.3、通用動作指令5.3.1、out標籤
Out標籤對錶達式進行運算,並將結果輸出到當前的JspWriter。Out的文法有兩種形式:
<c:out value=”value” [escapeXml=”{true|false}”] [default=”defaultValue”] />
<c:out value=”value” [escapeXml=”{true|false}”]>
Default value
</c:out>
5.3.2、set標籤
利用set標籤可以完成以下工作:
1、建立一個字串和引用該字串的一個限域變數。
2、建立一個限域變數,並引用已經存在的某一個限域變數。
3、設定限域對象的屬性。
如果利用set建立限域變數,那麼處於該標籤之後的整個jsp頁面將都可以使用該變數。
Set標籤的文法有4種形式。第一種形式用來建立一個限域變數,在該變數的value屬性中可以指定要建立的字串,或者現有的限域對象。
No1、
<c:set value=”value” var=”varName” [scope=”{page|request|session|application}”] />
No2、
<c:set value=”value” var=”varName” [scope=”{page|request|session|application}”] >
Body content
</c:set>
No3、設定限域對象的屬性值。Target屬性指定限域對象,property屬性指定限域對象的屬性。要賦給該屬性的值通過value屬性進行設定:
<c:set target=”target” property=”propertyName” value=”value” />
例如,下面的set標籤是將字串Tokyo賦給限域對象address的city屬性:
<c:set target=”${address}” property=”city” value=”Tokyo” />
No4、值是做為主體內容傳遞的:
<c:set target=”target” property=”propertyName”>
Body content
</c:set>
5.3.3、remove標籤
利用remove標籤刪除限域變數,文法如下:
<c:remove var=”varName” [scope=”{page|request|session|application}”] />
注意:限域變數引用的對象並沒有被刪除。因此,如果另一個限域對象也在引用這個對象,那麼仍然可以通過另外這個限域對象來訪問該對象。
5.4、條件式動作指令
在JSTL中有4個標籤可以執行條件式動作指令:if、choose、when和otherwise。
5.4.1、if標籤
<c:if test=”testCondition” var=”varName” [scope=”{page|request|session|application}” />
或者
<c:if test=”testCondition” [var=”varName”] [scope=”{page|request|session|application}”>
Body content
</c:if>
屬性 |
類型 |
描述 |
Test+ |
Boolean |
決定是否應該處理某些現有主體內容的測試內容 |
Var |
String |
引用測試條件的限域變數名稱,var的類型為boolean |
Scope |
String |
用var設定的限域變數的範圍 |
5.4.2、choose、when和otherwise標籤
Choose和when標籤的作用與java中的switch和case關鍵字相似,也就是說,它們為互斥的條件式執行提供相關內容。Choose標籤內部必須嵌有一個或多個when標籤,每個when標籤代表可以運行運算和處理的一種情況。Otherwise標籤用於預設的條件代碼塊,如果所有when標籤的測試條件運算結果都不為true,就會執行該代碼塊。如果有otherwise標籤,它必須放在最後一個when標籤之後。
例如:
<c:choose>
<c:when test=”${param.status==’full’}”>
You atr a full member
</c:when>
<c:when test=”${param.status==’student’}”>
You are a student memeber
</c:when>
<c:otherwise>
Please register
</c:otherwise>
</c:choose>
5.5、iterator動作指令
兩個可以執行iterator動作指令的標籤:forEach和forTokens。
5.5.1、forEach標籤
forEach的文法有兩種形式,第一種是將body內容重複一定的次數:
<c:forEach [var=”varName”] begin=”begin” end=”end” step=”step”>
Body content
<c:forEach>
第二種形式用於迭代一個對象集合:
<c:forEach items=”collection” [var=”varName”] [varStatus=”varStatusName”]
[begin=”begin”] [end=”end”] [step=”step”]>
Body content
</c:forEach>
屬性 |
類型 |
描述 |
Var |
String |
引用當前迭代項目的限域變數名稱 |
Items+ |
支援的任何類型 |
要迭代的對象集合 |
varStatus |
String |
儲存迭代狀態的限域變數名稱,它的值類型為javax.servlet.jsp.jstl.core.LoopTagStatus |
Begin+ |
Int |
如果指定了items,那麼迭代將從處於指定索引的項開始,該集合中的第一個項索引為0。如果沒有指定items,迭代將從該值設定的索引開始。如有指定,begin的值必須大於或者等於0。 |
End+ |
Int |
如果指定了items,那麼迭代將結束於處於指定索引的項;如果沒有指定的items,那麼當索引到達指定值時,迭代結束。 |
Step+ |
Int |
步長,迭代會從集合的第一個step項開始,根據step步長逐個地進行,如果有step屬性,那麼它的值必須大於或者等於1。 |