日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

核心JSTL標(biāo)簽庫

 COZUCHOU 2012-09-19

JSTL 全名為Java Server Pages Standard Tag LibraryJSP Standard Tag Library,它的中文名稱為JSP 標(biāo)準(zhǔn)標(biāo)簽函數(shù)庫。 

Web 程序開發(fā)人員能夠利用JSTLEL來開發(fā)Web 程序,取代傳統(tǒng)直接在頁面上嵌入Java程序(Scripting)的做法,以提高程序可讀性、維護(hù)性和方便性。 

JSTL是一個標(biāo)準(zhǔn)的已制定好的標(biāo)簽庫,可以應(yīng)用于各種領(lǐng)域,如:基本輸入輸出、流程控制、循環(huán)、XML文件剖析、數(shù)據(jù)庫查詢及國際化和文字格式標(biāo)準(zhǔn)化的應(yīng)用等。JSTL所提供的標(biāo)簽函數(shù)庫主要分為五大類:

1)核心標(biāo)簽庫 (Core tag library)

2I18N 格式標(biāo)簽庫 (I18N-capable formatting tag library)

3SQL 標(biāo)簽庫 (SQL tag library)

4XML 標(biāo)簽庫 (XML tag library)

5)函數(shù)標(biāo)簽庫 (Functions tag library)

JSTL

前綴

URI

核心標(biāo)簽庫

c

http://java./jsp/jstl/core

I18N格式標(biāo)簽庫

fmt

http://java./jsp/jstl/xml

SQL標(biāo)簽庫

sql

http://java./jsp/jstl/sql

XML標(biāo)簽庫

xml

http://java./jsp/jstl/fmt

函數(shù)標(biāo)簽庫

fn

http://java./jsp/jstl/functions

 

若要在JSP 網(wǎng)頁中使用JSTL ,一定要先做下面這行聲明:

< %@ taglib prefix="c" uri="http://java./jsp/jstl/core" %> 

 

核心標(biāo)簽庫 (Core tag library)

Core 標(biāo)簽庫,又被稱為核心標(biāo)簽庫,該標(biāo)簽庫的工作是對于 JSP 頁面一般處理的封裝。在該標(biāo)簽庫中的標(biāo)簽一共有 14 個,被分為了四類,分別是:

q         通用核心標(biāo)簽: <c:out> 、 <c:set> 、 <c:remove> 、 <c:catch>

q         條件控制標(biāo)簽: <c:if> 、 <c:choose> 、 <c:when> 、 <c:otherwise>

q         循環(huán)控制標(biāo)簽: <c:forEach> 、 <c:forTokens> 。

q         URL 相關(guān)標(biāo)簽: <c:import> <c:url> 、 <c:redirect> 、 <c:param>

<c:out>

<c:out>主要用來顯示數(shù)據(jù)的內(nèi)容,就像是 <%= scripting-language %> 一樣,例如:Hello ! <c:out value="${username}" />

語法

語法1:沒有本體(body)內(nèi)容

<c:out value="value" [escapeXml="{true|false}"] [default="defaultValue"] />

語法2:有本體內(nèi)容

<c:out value="value" [escapeXml="{true|false}"]>

default value

</c:out>

屬性名稱

說明

EL

類型

必須

默認(rèn)值

value

需要顯示出來的值

Y

Object

default

如果value的值為null則顯示default的值

Y

Object

escapeXml

是否轉(zhuǎn)換特殊字符,如:<轉(zhuǎn)換成<

Y

boolean

true

 

注意

表格中的EL字段,表示此屬性的值是否可以為EL 表達(dá)式,例如:Y表示 attribute = "${表達(dá)式}"為符合語法的,N 則反之。

 

Null 和錯誤處理

· 假若 valuenull,會顯示default 的值;假若沒有設(shè)定default的值,則會顯示一個空

的字符串。

說明

一般來說,<c:out>默認(rèn)會將 <、>、’、” 和 & 轉(zhuǎn)換為 <>、&#039;、&#034; &。

假若不想轉(zhuǎn)換時,只需要設(shè)定<c:out>escapeXml 屬性為fasle 就可以了。

范例

<c:out value="Hello JSP 2.0 !! " />

<c:out value="${ 3 + 5 }" />

<c:out value="${ param.data }" default="No Data" />

<c:out value="<p>有特殊字符</p>" />

<c:out value="<p>有特殊字符</p>" escapeXml="false" />

1.在網(wǎng)頁上顯示 Hello JSP 2.0 !! ;

2.在網(wǎng)頁上顯示 8;

3.在網(wǎng)頁上顯示由窗體傳送過來的data 參數(shù)之值,假若沒有data 參數(shù),或data 參數(shù)的值為null 時,則網(wǎng)頁上會顯示No Data;

4.在網(wǎng)頁上顯示“<p>有特殊字符</p>”;

5.在網(wǎng)頁上顯示“有特殊字符”。

 

<c:set>

<c:set>主要用來將變量儲存至JSP范圍中或是JavaBean的屬性中。

語法

語法1:將 value 的值儲存至范圍為scope varName 變量之中

<c:set value="value" var="varName" [scope="{ page|request|session|application }"]/>

語法2:將本體內(nèi)容的數(shù)據(jù)儲存至范圍為scope varName 變量之中

<c:set var="varName" [scope="{ page|request|session|application }"]>

… 本體內(nèi)容

</c:set>

語法3value 的值儲存至 target 對象的屬性中

< c:set value="value" target="target" property="propertyName" />

語法4

將本體內(nèi)容的數(shù)據(jù)儲存至 target 對象的屬性中

<c:set target="target" property="propertyName">

… 本體內(nèi)容

</c:set>

屬性

名稱

說明

EL

類型

必須

默認(rèn)值

value

要被儲存的值

Y

Object

var

欲存入的變量名稱

N

String

scopevar

變量的JSP范圍

N

String

page

target

為一JavaBeanjava.util.Map對象

Y

Object

property

指定target對象的屬性

Y

String

范例

<c:set var="number" scope="request" value="${1 + 1}" />

<c:set var="number" scope="session" />

${3 + 5}

</c:set>

<c:set var="number" scope="request" value="${ param.number }" />

<c:set target="User" property="name" value="${ param.Username}" />

1.將2 存入Request 范圍的number 變量中;

2.將8 存入Session 范圍的number 變量中;<c:set>是把本體(body)運算后的結(jié)果來當(dāng)做value的值。

3.假若 ${param.number}null 時,則移除Request 范圍的number 變量;若${param.number}不為null 時,則將 ${param.number}的值存入Request 范圍的number 變量中;

4.假若 ${param.Username}null 時,則設(shè)定User(JavaBean)name 屬性為null;若不為

null 時,則將 ${param.Username}的值存入User(JavaBean)name 屬性(setter 機制)。

注意

上述范例的3.中,假若 ${param.number}null時,則表示移除Request范圍的number變量。

<c:remove>

<c:remove>主要用來移除變量。

語法

<c:remove var="varName" [scope="{ page|request|session|application }"] />

屬性

名稱

說明

EL

類型

必須

默認(rèn)值

var

欲移除的變量名稱

N

String

scope

var變量的JSP范圍

N

String

page

說明

<c:remove>必須要有var 屬性,即要被移除的屬性名稱,scope 則可有可無,例如:

<c:remove var="number" scope="session" />

number 變量從Session 范圍中移除。若我們不設(shè)定scope,則<c:remove>將會從Page、

RequestSession Application 中順序?qū)ふ沂欠翊嬖诿Q為number 的數(shù)據(jù),若能找到時,則將它移除掉,反之則不會做任何的事情。

注意:當(dāng)不指定scope時,回remove掉從page到application的var指定的變量

<c:catch>

<c:catch>主要用來處理產(chǎn)生錯誤的異常狀況,并且將錯誤信息儲存起來。

語法

<c:catch [var="varName"] >

… 欲抓取錯誤的部分

</c:catch>

屬性

名稱

說明

EL

類型

必須

默認(rèn)值

var

用來儲存錯誤信息的變量

N

String

說明

<c:catch>主要將可能發(fā)生錯誤的部分放在<c:catch></c:catch>之間。如果真的發(fā)生錯

誤,可以將錯誤信息儲存至varName 變量中,例如:

<c:catch var="message">

//可能發(fā)生錯誤的部分

</c:catch>

另外,當(dāng)錯誤發(fā)生在<c:catch></c:catch>之間時,則只有<c:catch></c:catch>之間的程序

會被中止忽略,但整個網(wǎng)頁不會被中止。 

<c:if>

<c:if>的用途就和我們一般在程序中用的if 一樣。

語法

語法1:沒有本體內(nèi)容(body)

<c:if test="testCondition" [var="varName"] [scope="{page|request|session|application}"]/>

語法2:有本體內(nèi)容

<c:if test="testCondition" [var="varName"] [scope="{page|request|session|application}"]>

具體內(nèi)容

</c:if>

屬性

名稱

說明

EL

類型

必須

默認(rèn)值

Test

如果表達(dá)式的結(jié)果為true,則執(zhí)行本體內(nèi)容,false則相反

Y

boolean

var

用來儲存test運算后的結(jié)果,即truefalse

N

String

scope

var變量的JSP范圍

N

String

page

<c:choose>

<c:choose>本身只當(dāng)做 <c:when> <c:otherwise> 的父標(biāo)簽。

語法

<c:choose>

本體內(nèi)容( <when> <otherwise> )

</c:choose>

限制

<c:choose>的本體內(nèi)容只能有:

·空白

·1 或多個 <c:when>

·0 或多個 <c:otherwise>

說明

若使用<c:when><c:otherwise>來做流程控制時,兩者都必須為<c:choose>的子標(biāo)簽.

<c:when>

<c:when>的用途就和我們一般在程序中用的when 一樣。

語法

<c:when test="testCondition" >

本體內(nèi)容

</c:when>

屬性

名稱

說明

EL

類型

必須

默認(rèn)值

Test

如果表達(dá)式的結(jié)果為true,則執(zhí)行本體內(nèi)容,false則相反

Y

boolean

 

限制

<c:when>必須在<c:choose></c:choose>之間

☆ 在同一個<c:choose>中時,<c:when>必須在<c:otherwise>之前

說明

<c:when>必須有test 屬性,當(dāng)test中的表達(dá)式結(jié)果為true時,則會執(zhí)行本體內(nèi)容;如果為

false時,則不會執(zhí)行。

<c:otherwise>

在同一個 <c:choose> 中,當(dāng)所有 <c:when> 的條件都沒有成立時,則執(zhí)行<c:otherwise>

本體內(nèi)容。

語法

<c:otherwise>

本體內(nèi)容

</c:otherwise>


<c:forEach>

<c:forEach> 為循環(huán)控制,它可以將集合(Collection)中的成員循序瀏覽一遍。運作方式為當(dāng)

條件符合時,就會持續(xù)重復(fù)執(zhí)行<c:forEach>的本體內(nèi)容。

語法1:迭代一集合對象之所有成員

<c:forEach [var="varName"] items="collection" [varStatus="varStatusName"] [begin="begin"][end="end"] [step="step"]>

本體內(nèi)容

< /c:forEach>

語法2:迭代指定的次數(shù)

<c:forEach [var="varName"] [varStatus="varStatusName"] begin="begin" end="end"

[step="step"]>

本體內(nèi)容

</c:forEach>

限制

·假若有begin 屬性時,begin 必須大于等于 0

·假若有end 屬性時,必須大于begin

·假若有step 屬性時,step 必須大于等于0

Null 和錯誤處理

·假若items null 時,則表示為一空的集合對象

·假若begin 大于或等于items 時,則迭代不運算

 

Code

<c:forEach>除了支持?jǐn)?shù)組之外,還有標(biāo)準(zhǔn)J2SE 的集合類型,例如:ArrayList、List、
LinkedList、Vector、Stack和Set 等等;另外還包括java.util.Map 類的對象.

<c:forEach>并不只是用來瀏覽集合對象而已,讀者可以從語法2中發(fā)現(xiàn),items并不存在

,但是當(dāng)沒有使用items 屬性時,就一定要使用begin end 這兩個屬性。

Code

上述范例中,我們并沒有執(zhí)行瀏覽集合對象,只是設(shè)定begin 和end 屬性的值,這樣它就
變成一個普通的循環(huán)。此范例是將循環(huán)設(shè)定為:從1 開始跑到10,總共會重復(fù)循環(huán)10 次,并
且將數(shù)字放到item 的屬性當(dāng)中. 

begin主要用來設(shè)定在集合對象中開始的位置(注意:第一個位置為0);end 用來設(shè)定結(jié)束的位置;而step 則是用來設(shè)定現(xiàn)在指到的成員和下一個將被指到成員之間的間隔.

另外,<c:forEach>還提供varStatus 屬性,主要用來存放現(xiàn)在指到之成員的相關(guān)信息。例如: varStatus="s",那么將會把信息存放在名稱為s的屬性當(dāng)中。varStatus屬性還有另外四個屬性:index、countfirst last,它們各自代表的意義如表:

屬性

類型

意義

index

number

現(xiàn)在指到成員的索引

count

number

總共已經(jīng)指到成員的總數(shù)

first

boolean

現(xiàn)在指到的成員是否為第一個成員

last

boolean

現(xiàn)在指到的成員是否為最后一個成員

 我們可以使用varStatus 屬性取得循環(huán)正在瀏覽之成員的信息,下面為一個簡單的范例:

Code

 

 

還有一個例子:

我要獲?。篽ttp://localhost:8080/t/index.jsp?a=123&b=256&com=297中的參數(shù)列表按如下:

鍵com:297
鍵b:256
鍵a:123

可以結(jié)合EL表單式實現(xiàn):

<c:forEach items="${param}" var="b">
        鍵${b.key}:${b.value }
<br/>
</c:forEach>

 

 

 

<c:forTokens> 

<c:forTokens> 用來瀏覽一字符串中所有的成員,其成員是由定義符號(delimiters)所分隔的。
語法:
<c:forTokens   items="stringOfTokens"

        delims="delimiters"

        [var="varName"]

        [varStatus="varStatusName"]

        [begin="begin"]

        [end="end"]

        [step="step"]>
本體內(nèi)容
</c:forTokens>  


var       用來存放現(xiàn)在指到的成員N String 否無
items   被迭代的字符串Y String 是無
delims     定義用來分割字符串的字符N String 是無
varStatus 用來存放現(xiàn)在指到的相關(guān)成員信息N String 否無
begin       開始的位置Y int 否0
end         結(jié)束的位置Y int 否最后一個成員
step    每次迭代的間隔數(shù)Y int 否1

說明
<c:forTokens>的begin、end、step、var 和varStatus 用法都和<c:forEach>一樣,因此,筆者在這里就只介紹items 和delims 兩個屬性:items 的內(nèi)容必須為字符串;而delims 是用來分割items 中定義的字符串之字符。
范例
下面為一個典型的<c:forTokens>的范例:

<c:forTokens items="A,B,C,D,E" delims="," var="item" >
${item}
</c:forTokens>

上面范例執(zhí)行后,將會在網(wǎng)頁中輸出ABCDE。它會把符號“,”當(dāng)做分割的標(biāo)記,拆成5 個部分,也就是執(zhí)行循環(huán)5 次,但是并沒有將A,B,C,D,E 中的“,”顯示出來。items 也可以放入EL 的表達(dá)式,如下:

復(fù)制代碼
<%
String phoneNumber = "123-456-7899";
request.setAttribute(
"userPhone", phoneNumber);
%>
<c:forTokens items="${userPhone}" delims="-" var="item" >
${item}
</c:forTokens>
復(fù)制代碼

這個范例將會在網(wǎng)頁上打印1234567899,也就是把123-456-7899以“-”當(dāng)做分割標(biāo)記,將字符串拆為 3 份,每執(zhí)行一次循環(huán)就將瀏覽的部分放到名稱為item 的屬性當(dāng)中。delims 不只指定一種字符來分割字符串,它還可以一次設(shè)定多個分割字符串用的字符。如下面這個范例:

<c:forTokens items="A,B;C-D,E" delims=",;-" var="item" >
${item}
</c:forTokens>

此范例會在網(wǎng)頁輸出ABCDE,也就是說,delims 可以一次設(shè)定所有想當(dāng)做分割字符串用的字符。其實用<c:forEach>也能做到分割字符串,寫法如下:

<c:forEach items="A,B,C,D,E" var="item" >
${item}
</c:forEach>

上述范例同樣也會在網(wǎng)頁輸出ABCDE。<c:forEach>并沒有delims這個屬性,因 此<c:forEach>無法設(shè)定分割字符串用的字符,而<c:forEach>分割字符串用的字符只有“,”,這和使 用<c:forTokens>,delims 屬性設(shè)為“,”的結(jié)果相同。所以如果使用<c:forTokens>來分割字符串,功能和彈性上會比使用<c:forEach> 來得較大

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多