天天看點

第五章_JSTL

<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指令:

&lt;%@ taglib uri=”uri” prefix=”prefix”%&gt;  

例如,為了使用core類庫,必須在jsp頁面開頭處這樣聲明:

&lt;%@ taglib uri=”http://java.sun.com/jsp/jstl/core” prefix=”c”%&gt;  

out标簽對表達式進行運算,并将結果輸出到目前的jspwriter。out的文法有兩種形式:

&lt;c:out value=”value” [escapexml=”{true|false}”] [default=”defaultvalue”] /&gt;  

&lt;c:out value=”value” [escapexml=”{true|false}”]&gt;  

default value  

&lt;/c:out&gt;  

利用set标簽可以完成以下工作:

1、建立一個字元串和引用該字元串的一個限域變量。

2、建立一個限域變量,并引用已經存在的某一個限域變量。

3、設定限域對象的屬性。

如果利用set建立限域變量,那麼處于該标簽之後的整個jsp頁面将都可以使用該變量。

set标簽的文法有4種形式。第一種形式用來建立一個限域變量,在該變量的value屬性中可以指定要建立的字元串,或者現有的限域對象。

no1、

&lt;c:set value=”value” var=”varname” [scope=”{page|request|session|application}”] /&gt;  

no2、

&lt;c:set value=”value” var=”varname” [scope=”{page|request|session|application}”] &gt;  

body content  

&lt;/c:set&gt;  

no3、設定限域對象的屬性值。target屬性指定限域對象,property屬性指定限域對象的屬性。要賦給該屬性的值通過value屬性進行設定:

&lt;c:set target=”target” property=”propertyname” value=”value” /&gt;  

例如,下面的set标簽是将字元串tokyo賦給限域對象address的city屬性:

&lt;c:set target=”${address}” property=”city” value=”tokyo” /&gt;  

no4、值是做為主體内容傳遞的:

&lt;c:set target=”target” property=”propertyname”&gt;  

利用remove标簽删除限域變量,文法如下:

&lt;c:remove var=”varname” [scope=”{page|request|session|application}”] /&gt;  

注意:限域變量引用的對象并沒有被删除。是以,如果另一個限域對象也在引用這個對象,那麼仍然可以通過另外這個限域對象來通路該對象。

在jstl中有4個标簽可以執行條件式動作指令:if、choose、when和otherwise。

&lt;c:if test=”testcondition” var=”varname” [scope=”{page|request|session|application}” /&gt;  

或者

&lt;c:if test=”testcondition” [var=”varname”] [scope=”{page|request|session|application}”&gt;  

&lt;/c:if&gt;  

屬性

類型

描述

test+

boolean

決定是否應該處理某些現有主體内容的測試内容

var

string

引用測試條件的限域變量名稱,var的類型為boolean

scope

用var設定的限域變量的範圍

choose和when标簽的作用與java中的switch和case關鍵字相似,也就是說,它們為互相排斥的條件式執行提供相關内容。choose标簽内部必須嵌有一個或多個when标簽,每個when标簽代表可以運作運算和處理的一種情況。otherwise标簽用于預設的條件代碼塊,如果所有when标簽的測試條件運算結果都不為true,就會執行該代碼塊。如果有otherwise标簽,它必須放在最後一個when标簽之後。

例如:

&lt;c:choose&gt;  

&lt;c:when test=”${param.status==’full’}”&gt;  

you atr a full member  

&lt;/c:when&gt;  

&lt;c:when test=”${param.status==’student’}”&gt;  

you are a student memeber  

&lt;c:otherwise&gt;  

please register  

&lt;/c:otherwise&gt;  

&lt;/c:choose&gt;  

兩個可以執行iterator動作指令的标簽:foreach和fortokens。

foreach的文法有兩種形式,第一種是将body内容重複一定的次數:

&lt;c:foreach [var=”varname”] begin=”begin” end=”end” step=”step”&gt;  

&lt;c:foreach&gt;  

第二種形式用于疊代一個對象集合:

&lt;c:foreach items=”collection” [var=”varname”] [varstatus=”varstatusname”]  

[begin=”begin”] [end=”end”] [step=”step”]&gt;  

&lt;/c:foreach&gt;  

引用目前疊代項目的限域變量名稱

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,這個動作指令的文法如下:

&lt;c:fortokens items=”stringoftokens” delims=”delimiters” [var=”varname”]  [varstatus=”varstatusname”] [begin=”begin”] [end=”end”] [step=”step”]&gt;  

&lt;/c:fortokens&gt;  

引用目前疊代項的限域變量名稱

要疊代的token字元串

疊代的起始索引,這裡的索引是從0開始的。如果有begin屬性,那麼它的值必須大于或者等于0。

疊代的結束索引,這裡的索引是從0開始的。

step

疊代會從集合的第一個step項開始,逐個地進行。如果有step屬性,那麼它的值必須大于或者等于1

delims+

一組分節符

下面是一個fortokens範例:

&lt;c:fortokens var=”item” items=”argentina,brazil,chile” delims=”,”&gt;  

&lt;c:out value=”${item}” /&gt;&lt;br /&gt;  

當它放在jsp中時,上述fortokens将産生以下結果:  

argentina  

brazil  

chile  

jstl提供了格式化和解析數字和日期的标簽,有:formatnumber、formatdate、tomezone、settimezone、parsenumber及parsedate。

除了定制動作指令之外,jstl1.1和1.2中還定義了一組标準函數,可以用在el表達式中,這些函數分組放在函數标簽類庫中。當使用這些函數時,必須在jsp上使用taglib指令。

&lt;%@ taglib uri=”http://java.sun.com/jsp/jstl/functions” prefix=”fn”%&gt;

調用函數時,要以下面這種格式來使用el:

${fn:functionname}

這裡的functionname是函數名稱

文法如下:

contains(string,substring)

例如下面這些el表達式都傳回true:

&lt;c:set var=”mystring” value=”hello world” /&gt;  

${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 &lt;br/&gt; to change lines”)}  

顯示為:  

use &lt;br/&gt; 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表格。

&lt;c:set var=”split” value=’${fn:split(“my,world”,”,”)}’ /&gt;  

&lt;table&gt;  

&lt;c:foreach var=”substring” items=”${split}”&gt;  

&lt;tr&gt;&lt;td&gt;${substring}&lt;/td&gt;&lt;/tr&gt;  

&lt;/table&gt;  

其結果為:  

&lt;tr&gt;&lt;td&gt;my&lt;/td&gt;&lt;/tr&gt;  

&lt;tr&gt;&lt;td&gt;world&lt;/td&gt;&lt;/tr&gt;  

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       ”)}