<a target="_blank" href="http://jstl.java.net/">http://jstl.java.net</a>
類别
下屬功能
uri
字首
core
變量支援
c
流向控制
url管理
雜項
xml
http://java.sun.com/jsp/jstl/xml
x
轉換
i18n
語言環境
http://java.sun.com/jsp/jstl/fmt
fmt
消息格式化
數字和日期格式化
<a href="http://lib.csdn.net/base/14" target="_blank">資料庫</a>
sql
http://java.sun.com/jsp/jstl/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”%>
out标簽對表達式進行運算,并将結果輸出到目前的jspwriter。out的文法有兩種形式:
<c:out value=”value” [escapexml=”{true|false}”] [default=”defaultvalue”] />
<c:out value=”value” [escapexml=”{true|false}”]>
default value
</c:out>
利用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”>
利用remove标簽删除限域變量,文法如下:
<c:remove var=”varname” [scope=”{page|request|session|application}”] />
注意:限域變量引用的對象并沒有被删除。是以,如果另一個限域對象也在引用這個對象,那麼仍然可以通過另外這個限域對象來通路該對象。
在jstl中有4個标簽可以執行條件式動作指令:if、choose、when和otherwise。
<c:if test=”testcondition” var=”varname” [scope=”{page|request|session|application}” />
或者
<c:if test=”testcondition” [var=”varname”] [scope=”{page|request|session|application}”>
</c:if>
屬性
類型
描述
test+
boolean
決定是否應該處理某些現有主體内容的測試内容
var
string
引用測試條件的限域變量名稱,var的類型為boolean
scope
用var設定的限域變量的範圍
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:otherwise>
please register
</c:otherwise>
</c:choose>
兩個可以執行iterator動作指令的标簽:foreach和fortokens。
foreach的文法有兩種形式,第一種是将body内容重複一定的次數:
<c:foreach [var=”varname”] begin=”begin” end=”end” step=”step”>
<c:foreach>
第二種形式用于疊代一個對象集合:
<c:foreach items=”collection” [var=”varname”] [varstatus=”varstatusname”]
[begin=”begin”] [end=”end”] [step=”step”]>
</c:foreach>
引用目前疊代項目的限域變量名稱
items+
支援的任何類型
要疊代的對象集合
varstatus
儲存疊代狀态的限域變量名稱,它的值類型為javax.servlet.jsp.jstl.core.looptagstatus
varstatus定義了一個循環變量var,循環狀态變量中儲存了循環進行時儲存的資訊,包括下面幾個屬性:
index:目前循環索引号
count成員總數
last:是否為最後一個成員
index的值是疊代的索引值+begin
begin+
int
如果指定了items,那麼疊代将從處于指定索引的項開始,該集合中的第一個項索引為0。如果沒有指定items,疊代将從該值設定的索引開始。如有指定,begin的值必須大于或者等于0。
end+
如果指定了items,那麼疊代将結束于處于指定索引的項;如果沒有指定的items,那麼當索引到達指定值時,疊代結束。
step+
步長,疊代會從集合的第一個step項開始,根據step步長逐個地進行,如果有step屬性,那麼它的值必須大于或者等于1。
fortokens标簽可用于疊代以特定分界符分隔的token,這個動作指令的文法如下:
<c:fortokens items=”stringoftokens” delims=”delimiters” [var=”varname”] [varstatus=”varstatusname”] [begin=”begin”] [end=”end”] [step=”step”]>
</c:fortokens>
引用目前疊代項的限域變量名稱
要疊代的token字元串
疊代的起始索引,這裡的索引是從0開始的。如果有begin屬性,那麼它的值必須大于或者等于0。
疊代的結束索引,這裡的索引是從0開始的。
step
疊代會從集合的第一個step項開始,逐個地進行。如果有step屬性,那麼它的值必須大于或者等于1
delims+
一組分節符
下面是一個fortokens範例:
<c:fortokens var=”item” items=”argentina,brazil,chile” delims=”,”>
<c:out value=”${item}” /><br />
當它放在jsp中時,上述fortokens将産生以下結果:
argentina
brazil
chile
jstl提供了格式化和解析數字和日期的标簽,有:formatnumber、formatdate、tomezone、settimezone、parsenumber及parsedate。
除了定制動作指令之外,jstl1.1和1.2中還定義了一組标準函數,可以用在el表達式中,這些函數分組放在函數标簽類庫中。當使用這些函數時,必須在jsp上使用taglib指令。
<%@ taglib uri=”http://java.sun.com/jsp/jstl/functions” prefix=”fn”%>
調用函數時,要以下面這種格式來使用el:
${fn:functionname}
這裡的functionname是函數名稱
文法如下:
contains(string,substring)
例如下面這些el表達式都傳回true:
<c:set var=”mystring” value=”hello world” />
${fn:contains(mystring, “hello”)}
${fn:contains(“stella cadente”, “cadente”)}
containsignorecase函數與contains函數類似,但其檢測是區分大小寫的,具體文法如下:
containsignorecase(string, substring)
endswith函數檢測某個字元串是否以指定的字尾結尾。其傳回值是一個boolean值,具體文法如下:
endswith(string, suffix)
例如:以下el表達式将傳回true
${fn:endswith(“hello world”, “world”)}
該函數用于給string進行編碼,它的轉換方法與out标簽将其escapexml屬性設為true時相似,具體文法如下:
escapexml(string)
例如:el表達式
${fn:escapexml(“user <br/> to change lines”)}
顯示為:
use <br/> to change lines
indexof函數傳回在某個字元串中第一次出現指定子字元串時的索引。如果沒有找到指定的子字元串,它将傳回-1,具體文法如下:
indexof(string,substring)
例如,以下el表達式将傳回7:
${fn:indexof(“stella cadente”, “cadente”)}
join函數将一個string數組中的所有元素都合并成一個字元串,中間用指定的分隔符隔開,其文法如下:
join(array, separator)
如果數組為null,将傳回一個空的字元串。
例如,如果myarray是一個具有兩個元素”my”和”world”的string數組,那麼el表達式:
${fn:join(myarray, “,”)}将傳回”my,world”
length函數将傳回一個集合中的項目數,或者一個字元串中的字元數。其文法如下:
length(input)
舉個例子,下面的el表達式将傳回14:
${fn:length(“stella cadente”)}
replace函數用afterstring替換某一個字元串中所有的beforestring,并傳回結果。其文法replace(string, beforesubstring, aftersubstring)
例如,el表達式
${fn:replace(“stella cadente”, “e”, “e”)}
将傳回”stella cadente”
split函數将一個字元串分解成一組子字元串,它的作用與join相反。例如,以下代碼分界字元串”my,world”,并将結果儲存在限域變量split中。然後,它利用foreach标簽将split格式化成一個html表格。
<c:set var=”split” value=’${fn:split(“my,world”,”,”)}’ />
<table>
<c:foreach var=”substring” items=”${split}”>
<tr><td>${substring}</td></tr>
</table>
其結果為:
<tr><td>my</td></tr>
<tr><td>world</td></tr>
startswith函數測試某個字元串是否以指定的字首開頭,其文法如下:
startswith(string,prefix)
例如,以下el表達式将傳回true:
${fn:startswith(“stella cadente”, “st”)}
substring函數将傳回一個從指定的起始索引(從0開始,含起始索引)至指定的結束索引之間的子字元串,其文法如下:
substring(string, beginindex, endindex)
例如,以下el表達式将傳回”stel”
${fn:substring(“stella cadente”, 0, 4)}
substringafter函數傳回第一次出現指定子字元串之後的字元串部分,其文法如下:
substringafter(string, substring)
例如,以下el表達式
${fn:substringafter(“stella cadente”, “e”)}
将傳回”lla cadente”。
substringbefore函數傳回第一次出現子字元串之前的字元串部分,其文法如下:
substringbefore(string, substring)
例如,以下el表達式将傳回”st”
${fn:substringbefore(“stella cadente”, “e”)}
tolowercase函數将字元串轉換成全部小寫字母,其文法如下:
tolowercase(string)
例如,以下el表達式将傳回”stella cadente”:
${fn:tolowercase(“stella cadente”)}
touppercase函數将字元串轉換成全部大寫字母,其文法如下:
touppercase(string)
例如,以下el表達式将傳回”stella cadente”
${fn:touppercase(“stella cadente”)}
trim函數去掉字元串前後的空格,其文法如下:
trim(string)
${fn:trim(“ stella cadente ”)}