第 6 章 jstl標籤建立jsp程式

61
6 6 JSTL JSTL 第第第第 第第第第 JSP JSP 第第 第第 6-1 JSTL 6-1 JSTL 第第第 第第第 6-2 6-2 第第第第第第 第第第第第 第第第第第第 第第第第第 6-3 6-3 第第第第第第第第第第 第第第第第第第第第第 6-4 6-4 第第第第第第第第第第 第第第第第第第第第第 6-5 6-5 第第第第第第 第第第第第第 URL URL 第第第第 第第第第 6-6 6-6 第第第第第第第第第第第第第 第第第第第第第第第第第第第 6-7 6-7 第第第第第第第第第第第 第第第第第第第第第第第

Upload: jessica-owen

Post on 01-Jan-2016

95 views

Category:

Documents


0 download

DESCRIPTION

第 6 章 JSTL標籤建立JSP程式. 6-1 JSTL 標籤庫 6-2 核心標籤庫的一般用途標籤 6-3 核心標籤庫的條件標籤 6-4 核心標籤庫的迴圈標籤 6-5 核心標籤庫的 URL 處理標籤 6-6 格式標籤庫的日期與數值格式 6-7 格式標籤庫的國際化設定. 6-1 JSTL標籤庫. 6-1-1 JSTL 1.1 版標籤庫 6-1-2 在 JSP 程式使用 JSTL 標籤. 6-1-1 JSTL 1.1 版標籤庫 - 種類. JSTL 1.1 版標籤庫( Tag Libraries )依其不同用途,可以分為五種標籤庫,如下表所示:. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第 6 章  JSTL標籤建立JSP程式

第第 66 章 章 JSTLJSTL標籤建立標籤建立 JSPJSP程式程式 6-1 JSTL6-1 JSTL 標籤庫標籤庫 6-2 6-2 核心標籤庫的一般用途標籤核心標籤庫的一般用途標籤 6-3 6-3 核心標籤庫的條件標籤核心標籤庫的條件標籤 6-4 6-4 核心標籤庫的迴圈標籤核心標籤庫的迴圈標籤 6-5 6-5 核心標籤庫的核心標籤庫的 URLURL 處理標籤處理標籤 6-6 6-6 格式標籤庫的日期與數值格式格式標籤庫的日期與數值格式 6-7 6-7 格式標籤庫的國際化設定格式標籤庫的國際化設定

Page 2: 第 6 章  JSTL標籤建立JSP程式

6-1 JSTL6-1 JSTL標籤庫標籤庫 6-1-1 JSTL 1.16-1-1 JSTL 1.1 版標籤庫版標籤庫 6-1-2 6-1-2 在在 JSPJSP 程式使用程式使用 JSTLJSTL 標籤標籤

Page 3: 第 6 章  JSTL標籤建立JSP程式

6-1-1 JSTL 1.16-1-1 JSTL 1.1 版標籤庫版標籤庫 -- 種類種類 JSTL 1.1JSTL 1.1 版標籤庫(版標籤庫( Tag LibrariesTag Libraries )依)依

其不同用途,可以分為五種標籤庫,如下其不同用途,可以分為五種標籤庫,如下表所示:表所示:標籤庫 預設 URI 字首核心 http://java.sun.com/jsp/jstl/core c

格式 http://java.sun.com/jsp/jstl/fmt fmt

XML處理 http://java.sun.com/jsp/jstl/xml x

資料庫存取 http://java.sun.com/jsp/jstl/sql sql

函數 http://java.sun.com/jsp/jstl/functions fn

Page 4: 第 6 章  JSTL標籤建立JSP程式

6-1-1 JSTL 1.16-1-1 JSTL 1.1 版標籤庫版標籤庫 -- 說明說明11

核心標籤庫(核心標籤庫( CoreCore )) 核心標籤庫包含核心標籤庫包含 ELEL 範圍變數的建立和刪除標籤、範圍變數的建立和刪除標籤、

錯誤處理和一般程式語言流程控制的條件和迴圈錯誤處理和一般程式語言流程控制的條件和迴圈標籤。標籤。

URLURL 處理標籤可以使用在交談期追蹤(處理標籤可以使用在交談期追蹤( Session Session TrackingTracking ),和執行階段插入指定),和執行階段插入指定 URLURL 網址的網址的網頁或轉址到其它網頁或轉址到其它 URLURL 網址。網址。

格式標籤庫(格式標籤庫( I18N FormattiongI18N Formattiong )) 格式標籤庫提供資料格式和剖析的相關標籤,支格式標籤庫提供資料格式和剖析的相關標籤,支

援國際化格式援國際化格式 I18NI18N ,以便符合不同地區的資料,以便符合不同地區的資料格式差異,包含國際化編碼、訊息、數值和日期格式差異,包含國際化編碼、訊息、數值和日期格式等相關標籤。格式等相關標籤。

Page 5: 第 6 章  JSTL標籤建立JSP程式

6-1-1 JSTL 1.16-1-1 JSTL 1.1 版標籤庫版標籤庫 -- 說明說明22

XMLXML 處理標籤庫(處理標籤庫( XML ProcessingXML Processing )) XMLXML 處理標籤庫如同其名,就是在處理處理標籤庫如同其名,就是在處理 XMLXML 文文

件、支援件、支援 XMLXML 剖析、剖析、 XSTLXSTL 轉換和轉換和 XPathXPath 取出取出指定資料。指定資料。

資料庫存取標籤庫(資料庫存取標籤庫( Database AccessDatabase Access )) 資料庫存取標籤庫提供標籤執行資料庫存取標籤庫提供標籤執行 SQLSQL 指令來存取指令來存取

關聯式資料庫,可以在關聯式資料庫,可以在 JSPJSP 程式輕鬆執行程式輕鬆執行 SQLSQL 查查詢、更新和取得查詢結果,並且支援交易詢、更新和取得查詢結果,並且支援交易(( TransactionTransaction )處理的相關標籤。)處理的相關標籤。

函數標籤庫(函數標籤庫( FunctionsFunctions )) 函數標籤庫提供字串處理的相關函數,可以在函數標籤庫提供字串處理的相關函數,可以在 ELEL

運算式直接使用運算式直接使用 JSTLJSTL 標籤庫的函數來執行字串處標籤庫的函數來執行字串處理。理。

Page 6: 第 6 章  JSTL標籤建立JSP程式

6-1-2 6-1-2 在在 JSPJSP 程式使用程式使用 JSTLJSTL 標標籤籤

在在 JSPJSP 程式使用程式使用 JSTLJSTL 標籤庫需要使用標籤庫需要使用 taglibtaglib 指指引元素匯入指定引元素匯入指定 URIURI 的標籤庫。例如:匯入核心的標籤庫。例如:匯入核心標籤庫的標籤庫的 taglibtaglib 指令,如下所示:指令,如下所示:

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

上述指令的上述指令的 uriuri 屬性是標籤庫的預設屬性是標籤庫的預設URIURI,, prefixprefix 屬性對應字首(屬性對應字首( PrefixPrefix )。在匯入)。在匯入標籤庫後,就可以使用標籤庫後,就可以使用 JSTLJSTL 核心標籤庫,其基本核心標籤庫,其基本語法如下所示:語法如下所示:

<c:tagname attribute=" "…><c:tagname attribute=" "…> 上述標籤以字首上述標籤以字首 "c""c" 開頭,在開頭,在 ":"":" 後是標籤名稱和後是標籤名稱和

屬性清單。屬性清單。

Page 7: 第 6 章  JSTL標籤建立JSP程式

6-2 6-2 核心標籤庫的一般用途標籤核心標籤庫的一般用途標籤 6-2-1 <c:out>6-2-1 <c:out> 標籤輸出資料標籤輸出資料 6-2-2 <c:set>6-2-2 <c:set> 標籤建立變數標籤建立變數 6-2-3 <c:remove>6-2-3 <c:remove> 標籤移除變數標籤移除變數

Page 8: 第 6 章  JSTL標籤建立JSP程式

6-2-1 <c:out>6-2-1 <c:out> 標籤輸出資料標籤輸出資料 -- 語語法法

<c:out><c:out> 標籤可以將標籤可以將 valuevalue 屬性值的文字屬性值的文字值或值或 ELEL 運算式進行運算,將運算結果的運算式進行運算,將運算結果的nullnull或或 StringString 字串文字值送到瀏覽程式顯字串文字值送到瀏覽程式顯示,其功能類似示,其功能類似 JSPJSP的的 ExpressionExpression 元素。元素。其基本語法如下所示:其基本語法如下所示:

<c:out value="<c:out value=" 運算式運算式 " "

escapeXml="boolean“escapeXml="boolean“

default="default=" 運算式運算式 "/>"/>

Page 9: 第 6 章  JSTL標籤建立JSP程式

6-2-1 <c:out>6-2-1 <c:out> 標籤輸出資料標籤輸出資料 -- 範範例例

<c:out><c:out> 標籤的標籤的 defaultdefault 屬性可以用來作為一種屬性可以用來作為一種錯誤處理機制,當錯誤處理機制,當 valuevalue 屬性值為屬性值為 nullnull 時,就顯時,就顯示示 defaultdefault 屬性值,其寫法有兩種,如下所示:屬性值,其寫法有兩種,如下所示:

<c:out value="${param.name}" <c:out value="${param.name}" default="default=" 網頁設計網頁設計 "/>"/><c:out value="${myName}"><c:out value="${myName}">陳會安陳會安</c:out></c:out> 上述上述 defaultdefault 屬性值可以是屬性值可以是 <c:out><c:out> 標籤的屬性,標籤的屬性,

或是位在或是位在 <c:out><c:out>和和 </c:out></c:out> 標籤之中的字串標籤之中的字串內容。內容。

Page 10: 第 6 章  JSTL標籤建立JSP程式

6-2-2 <c:set>6-2-2 <c:set> 標籤建立變數標籤建立變數 -- 語語法法

JSTLJSTL的的 <c:set><c:set> 標籤提供標籤語法來建立標籤提供標籤語法來建立和指定範圍變數值,其基本語法如下所示:和指定範圍變數值,其基本語法如下所示:

<c:set var="name" value="<c:set var="name" value=" 運算式運算式 " "

scope="scope"scope="scope"

target="beans_object“target="beans_object“

property="property_name"/>property="property_name"/>

Page 11: 第 6 章  JSTL標籤建立JSP程式

6-2-2 <c:set>6-2-2 <c:set> 標籤建立變數標籤建立變數 -- 範例範例 11

建立和指定範圍變數值建立和指定範圍變數值 在在 <c:set><c:set> 標籤是使用標籤是使用 varvar、、 valuevalue和和 scopescope

屬性建立範圍變數,如下所示:屬性建立範圍變數,如下所示:<c:set var="code" value="02"/><c:set var="code" value="02"/><c:set var="number"><c:set var="number">02-2222222202-22222222</c:set></c:set><c:set var="phone" value="(${code})-$<c:set var="phone" value="(${code})-$

{number}"/>{number}"/> 上述上述 <c:set><c:set> 標籤建立範圍變數標籤建立範圍變數

areacodeareacode、、 numbernumber和和 phonephone,, phonephone 變數變數值是值是 ELEL 運算式,因為沒有使用運算式,因為沒有使用 scopescope 屬性,所屬性,所以預設為以預設為 PagePage 範圍變數。範圍變數。

Page 12: 第 6 章  JSTL標籤建立JSP程式

6-2-2 <c:set>6-2-2 <c:set> 標籤建立變數標籤建立變數 -- 範例範例 22

修改修改 JavaBeansJavaBeans或或 MapMap 物件的屬性物件的屬性 <c:set><c:set> 標籤修改物件屬性是使用標籤修改物件屬性是使用

targettarget、、 propertyproperty和和 valuevalue 屬性,如下所示:屬性,如下所示:<jsp:useBean id="list" <jsp:useBean id="list"

class="java.util.TreeMap" />class="java.util.TreeMap" /><c:set target="${list}" property="Joe" <c:set target="${list}" property="Joe"

value="value=" 陳會安陳會安 " />" /><c:set target="${list}" property="Tom" <c:set target="${list}" property="Tom"

value="value=" 張無忌張無忌 " />" /> 上述標籤是使用上述標籤是使用 <jsp:useBean><jsp:useBean> 動作元素建立動作元素建立

TreeMapTreeMap 集合物件,然後使用集合物件,然後使用 <c:set><c:set> 標籤新標籤新增集合物件的增集合物件的 22 個元素,個元素, propertyproperty 屬性的屬性的 JoeJoe和和 TomTom 是鍵,是鍵, valuevalue 屬性是值。屬性是值。

Page 13: 第 6 章  JSTL標籤建立JSP程式

6-2-3 <c:remove>6-2-3 <c:remove> 標籤移除變標籤移除變數數 -- 說明說明

<c:remove><c:remove> 標籤可以移除指定範圍的範標籤可以移除指定範圍的範圍變數,其基本語法如下所示:圍變數,其基本語法如下所示:

<c:remove var="name" <c:remove var="name"

scope="scope"/>scope="scope"/>

Page 14: 第 6 章  JSTL標籤建立JSP程式

6-2-3 <c:remove>6-2-3 <c:remove> 標籤移除變標籤移除變數數 -- 範例範例

<c:remove><c:remove> 標籤如果沒有指定標籤如果沒有指定 scopescope 屬性,屬性,就是刪除就是刪除 PagePage 範圍的變數,如下所示:範圍的變數,如下所示:

<c:remove var="var2"/><c:remove var="var2"/> 上述標籤刪除上述標籤刪除 PagePage 範圍名為範圍名為 var2var2 的變數。因為的變數。因為

不同範圍可能擁有同名的變數,所以,刪除指定不同範圍可能擁有同名的變數,所以,刪除指定範圍的變數請使用範圍的變數請使用 scopescope 屬性。例如:刪除屬性。例如:刪除RequestRequest 範圍的範圍的 var1var1 變數,如下所示:變數,如下所示:

<c:remove var="var1" scope="request"/><c:remove var="var1" scope="request"/>

Page 15: 第 6 章  JSTL標籤建立JSP程式

6-3 6-3 核心標籤庫的條件標籤核心標籤庫的條件標籤 6-3-1 <c:if>6-3-1 <c:if> 標籤的是否選條件標籤的是否選條件 6-3-2 <c:choose>6-3-2 <c:choose> 標籤的多選一條件標籤的多選一條件 6-3-3 6-3-3 巢狀的條件標籤巢狀的條件標籤

Page 16: 第 6 章  JSTL標籤建立JSP程式

6-3-1 <c:if>6-3-1 <c:if> 標籤的是否選條件標籤的是否選條件 -- 語語法法

<c:if><c:if> 標籤類似標籤類似 JavaJava的的 ifif 條件敘述,可條件敘述,可以建立是否選條件,其基本語法如下所示:以建立是否選條件,其基本語法如下所示:

<c:if test="<c:if test=" 運算式運算式 " var="name" " var="name" scope="scope">scope="scope">BodyBody</c:if></c:if> 上述上述 <c:if><c:if> 標籤的條件如果成立,就執行標籤的條件如果成立,就執行

<c:if><c:if>和和 </c:if></c:if> 標籤中的標籤中的 BodyBody 部分;部分;不成立,就不執行。不成立,就不執行。

Page 17: 第 6 章  JSTL標籤建立JSP程式

6-3-1 <c:if>6-3-1 <c:if> 標籤的是否選條件標籤的是否選條件 -- 語語法法

<c:if><c:if> 標籤的標籤的 testtest 屬性是一個條件的屬性是一個條件的 ELEL運算式,如果運算結果為運算式,如果運算結果為 truetrue ,就執行之,就執行之中的中的 BodyBody 內容,如下所示:內容,如下所示:

<c:if test="${score >= 60}"><c:if test="${score >= 60}"> JSPJSP 網頁製作徹底研究網頁製作徹底研究 -- 及格!及格! <br><br></c:if></c:if> 上述上述 testtest 屬性的條件如為屬性的條件如為 truetrue ,就顯示之,就顯示之

中的標籤內容。如果在中的標籤內容。如果在 <c:if><c:if> 標籤使用標籤使用varvar和和 scopescope 屬性,即可使用變數記錄條屬性,即可使用變數記錄條件判斷結果為件判斷結果為 truetrue 或 或 falsefalse 。。

Page 18: 第 6 章  JSTL標籤建立JSP程式

6-3-2 <c:choose>6-3-2 <c:choose> 標籤的多選一標籤的多選一條件條件 -- 語法語法

<c:choose><c:choose> 標籤類似標籤類似 JavaJava的的 switchswitch 條件敘述,條件敘述,可以建立多選一條件,其基本語法如下所示:可以建立多選一條件,其基本語法如下所示:

<c:choose><c:choose> <c:when test="<c:when test=" 運算式運算式 ">"> BodyBody </c:when></c:when> ………… ………… <c:otherwise><c:otherwise> BodyBody </c:otherwise></c:otherwise></c:choose></c:choose>

Page 19: 第 6 章  JSTL標籤建立JSP程式

6-3-2 <c:choose>6-3-2 <c:choose> 標籤的多選一條標籤的多選一條件件 -- 範例範例

例如:例如: GPAGPA 成績範圍判斷的成績範圍判斷的 <c:choose><c:choose> 標籤,標籤,如下所示:如下所示:

<c:choose><c:choose> <c:when test="${grade == 'A'}"><c:when test="${grade == 'A'}"> 學生成績超過學生成績超過 8080分分 <br><br> </c:when></c:when> <c:when test="${grade == 'B'}"><c:when test="${grade == 'B'}"> 學生成績為學生成績為 70~7970~79分分 <br><br> </c:when></c:when> ……… ……… <c:otherwise><c:otherwise> 學生成績低於學生成績低於 6060分分 <br><br> </c:otherwise></c:otherwise></c:choose></c:choose>

Page 20: 第 6 章  JSTL標籤建立JSP程式

6-3-3 6-3-3 巢狀的條件標籤巢狀的條件標籤 在在 <c:if><c:if>和和 <c:when><c:when> 條件標籤之中還可以擁有其它條件標籤之中還可以擁有其它

<c:if><c:if>和和 <c:choose><c:choose> 標籤,稱為巢狀條件標籤,如下標籤,稱為巢狀條件標籤,如下所示:所示:

<c:if test="${age >= 1 && age <= 100}"><c:if test="${age >= 1 && age <= 100}"> <c:choose><c:choose> <c:when test="${age <= 18}"><c:when test="${age <= 18}"> 學生票:學生票: 1212元元 <br><br> </c:when></c:when> <c:when test="${age < 65 && age > 18}"><c:when test="${age < 65 && age > 18}"> 普通票:普通票: 1515元元 <br><br> </c:when></c:when> <c:otherwise><c:otherwise> 敬老票:敬老票: 88 元元 <br><br> </c:otherwise></c:otherwise> </c:choose></c:choose></c:if></c:if>

Page 21: 第 6 章  JSTL標籤建立JSP程式

6-4 6-4 核心標籤庫的迴圈標籤核心標籤庫的迴圈標籤 6-4-1 <c:forEach>6-4-1 <c:forEach> 標籤標籤 6-4-2 <c:forTokens>6-4-2 <c:forTokens> 標籤標籤 6-4-3 6-4-3 迴圈標籤的迴圈標籤的 varStatusvarStatus 屬性屬性

Page 22: 第 6 章  JSTL標籤建立JSP程式

6-4-1 <c:forEach>6-4-1 <c:forEach> 標籤標籤 -- 語法語法 <c:forEach><c:forEach> 迴圈標籤可以取出陣列或集合物件迴圈標籤可以取出陣列或集合物件

的所有元素,也可以如同的所有元素,也可以如同 JavaJava的的 forfor 迴圈敘述成迴圈敘述成為一個計數迴圈,其基本語法如下所示:為一個計數迴圈,其基本語法如下所示:

<c:forEach var="name" items="<c:forEach var="name" items=" 運算式運算式 " "

begin="begin=" 運算式運算式 " end="" end=" 運算式運算式 " "

step="step=" 運算式運算式 ">">

BodyBody

</c:forEach></c:forEach>

Page 23: 第 6 章  JSTL標籤建立JSP程式

6-4-1 <c:forEach>6-4-1 <c:forEach> 標籤標籤 -- 語法說語法說明明

<c:forEach><c:forEach> 標籤如果指定標籤如果指定 itemsitems 屬性的陣列屬性的陣列或集合物件元素,這種操作稱為「迭代」或集合物件元素,這種操作稱為「迭代」(( IterationIteration ),即每執行一次迴圈取出一個元),即每執行一次迴圈取出一個元素儲存在素儲存在 varvar 屬性的範圍變數,然後執行屬性的範圍變數,然後執行 BodyBody內容。內容。

當標籤指定當標籤指定 beginbegin、、 endend和和 stepstep 屬性,就可以屬性,就可以限制迴圈只取出從限制迴圈只取出從 beginbegin 的開始元素,到的開始元素,到 endend 的的結束元素,以結束元素,以 stepstep 的增量執行迭代(的增量執行迭代( IteratioIterationn )。)。

若沒有指定若沒有指定 itemsitems 屬性,屬性, beginbegin、、 endend和和 stepstep屬性就是一種計數迴圈。屬性就是一種計數迴圈。

Page 24: 第 6 章  JSTL標籤建立JSP程式

6-4-1 <c:forEach>6-4-1 <c:forEach> 標籤標籤 -- 範例範例 11

取出集合物件的所有元素取出集合物件的所有元素 <c:forEach><c:forEach> 標籤可以取出標籤可以取出 JavaJava 集合物件的所集合物件的所

有元素。例如:取出有元素。例如:取出 TreeMapTreeMap 物件物件 listlist 的所有的所有元素,如下所示:元素,如下所示:

<c:forEach var="item" items="${list}"><c:forEach var="item" items="${list}">

[<c:out value="${item.key}"/>][<c:out value="${item.key}"/>]

(<c:out value="${list[item.key]}"/>)(<c:out value="${list[item.key]}"/>)

</c:forEach></c:forEach> 上述上述 varvar 屬性的屬性的 itemitem 變數可以取出每一次迴圈變數可以取出每一次迴圈

的集合物件元素,然後顯示元素的鍵和值。的集合物件元素,然後顯示元素的鍵和值。

Page 25: 第 6 章  JSTL標籤建立JSP程式

6-4-1 <c:forEach>6-4-1 <c:forEach> 標籤標籤 -- 範例範例 22

取出指定範圍的陣列元素取出指定範圍的陣列元素 在在 <c:forEach><c:forEach> 標籤加上標籤加上 beginbegin、、 endend和和

stepstep 屬性就可以取出陣列的部分元素,如下所示:屬性就可以取出陣列的部分元素,如下所示:<c:forEach var="item" items="${array}"<c:forEach var="item" items="${array}"

begin="1" end="2" step="1">begin="1" end="2" step="1">

[<c:out value="${item}"/>][<c:out value="${item}"/>]

</c:forEach></c:forEach> 上述上述 varvar 屬性的屬性的 itemitem 變數可以取出每一次迴圈變數可以取出每一次迴圈

的陣列元素,其範圍是從的陣列元素,其範圍是從 1~21~2 ,即顯示第,即顯示第 22 到第到第33 個陣列元素。個陣列元素。

Page 26: 第 6 章  JSTL標籤建立JSP程式

6-4-1 <c:forEach>6-4-1 <c:forEach> 標籤標籤 -- 範例範例 33

計數迴圈計數迴圈 在在 <c:forEach><c:forEach> 標籤如果沒有標籤如果沒有 itemsitems 屬屬

性,而只有指定性,而只有指定 beginbegin、、 endend和和 stepstep 屬屬性就成為一個計數迴圈。例如:顯示性就成為一個計數迴圈。例如:顯示 1~51~5的計數迴圈,如下所示:的計數迴圈,如下所示:

<c:forEach var="current" begin="1" <c:forEach var="current" begin="1" end="5" step="1">end="5" step="1">

[<c:out value="${current}"/>][<c:out value="${current}"/>]</c:forEach></c:forEach>

Page 27: 第 6 章  JSTL標籤建立JSP程式

6-4-2 <c:forTokens>6-4-2 <c:forTokens> 標籤標籤 -- 語法語法 <c:forTokens><c:forTokens> 標籤可以將範圍變數的字串使標籤可以將範圍變數的字串使

用分隔字元(用分隔字元( DelimiterDelimiter )來進行分割,我們可)來進行分割,我們可以將它視為是一種在字串中執行的迭代以將它視為是一種在字串中執行的迭代(( IterationIteration ),其基本語法如下所示:),其基本語法如下所示:

<c:forTokens var="name" items="<c:forTokens var="name" items=" 運算式運算式““ delims="delims=" 運算式運算式 "" begin="begin=" 運算式運算式 " end="" end=" 運算式運算式 " " step="step=" 運算式運算式 ">"> BodyBody</c:forTokens></c:forTokens>

Page 28: 第 6 章  JSTL標籤建立JSP程式

6-4-2 <c:forTokens>6-4-2 <c:forTokens> 標籤標籤 -- 語法說語法說明明

<c:forTokens><c:forTokens> 標籤的標籤的 itemsitems 屬性是一屬性是一個擁有個擁有 delimsdelims 屬性分隔字元的字串,每執屬性分隔字元的字串,每執行一次迴圈取出一個以分隔字元分割出的行一次迴圈取出一個以分隔字元分割出的元素,然後將它儲存在元素,然後將它儲存在 varvar 屬性的範圍變屬性的範圍變數,然後執行數,然後執行 BodyBody 內容。內容。

在標籤如果同時指定在標籤如果同時指定 beginbegin、、 endend和和stepstep 屬性,將限制取出屬性,將限制取出 beginbegin 的開始元素,的開始元素,到到 endend 的結束元素,以的結束元素,以 stepstep 的增量執行的增量執行迭代(迭代( IterationIteration )。)。

Page 29: 第 6 章  JSTL標籤建立JSP程式

6-4-2 <c:forTokens>6-4-2 <c:forTokens> 標籤標籤 -- 範例範例 <c:Tokens><c:Tokens> 標籤的標籤的 beginbegin、、 endend和和

stepstep 屬性與屬性與 <c:forEach><c:forEach> 標籤相同,請標籤相同,請參閱上一節的說明。例如:使用參閱上一節的說明。例如:使用 ",""," 分隔字分隔字元來分割元來分割 "1,2,3:4:5,6#7,8""1,2,3:4:5,6#7,8" 字串的字串的<c:forTokens><c:forTokens> 標籤,如下所示:標籤,如下所示:

<c:forTokens var="token" items="$<c:forTokens var="token" items="${str}" delims=",">{str}" delims=",">

[<c:out value="${token}"/>][<c:out value="${token}"/>]</c:forTokens></c:forTokens>

Page 30: 第 6 章  JSTL標籤建立JSP程式

6-4-3 6-4-3 迴圈標籤的迴圈標籤的 varStatusvarStatus 屬性屬性 --說明說明

<c:forEach><c:forEach>和和 <c:forTokens><c:forTokens> 標籤都擁有標籤都擁有varStatusvarStatus 屬性,可以顯示迴圈執行狀態,當使用屬性,可以顯示迴圈執行狀態,當使用varStatusvarStatus 屬性將狀態存入指定的範圍變數屬性將狀態存入指定的範圍變數 statusstatus 後,後,就可以使用相關屬性取得迴圈狀態,如下所示:就可以使用相關屬性取得迴圈狀態,如下所示:

<c:forEach var="item" items="${list}" <c:forEach var="item" items="${list}" varStatus="status">varStatus="status">

[<c:out value="${item.key}"/>][<c:out value="${item.key}"/>] (<c:out value="${list[item.key]}"/>)<br>(<c:out value="${list[item.key]}"/>)<br> <b>index:</b> ${status.index}<b>index:</b> ${status.index} <b>count:</b> ${status.count}<b>count:</b> ${status.count} <b>first:</b> ${status.first}<b>first:</b> ${status.first} <b>last: </b> ${status.last}<br><b>last: </b> ${status.last}<br></c:forEach></c:forEach>

Page 31: 第 6 章  JSTL標籤建立JSP程式

6-4-3 6-4-3 迴圈標籤的迴圈標籤的 varStatusvarStatus 屬性屬性 --屬性說明屬性說明

indexindex、、 countcount、、 firstfirst和和 lastlast 屬性的狀屬性的狀態說明,如下表所示:態說明,如下表所示:

屬性 傳回型態 說明index Number 目前元素的索引,從 0開始count Number 目前已經取出的元素個數first Boolean 是否是第 1個元素last Boolean 是否是最後 1個元素

Page 32: 第 6 章  JSTL標籤建立JSP程式

6-5 6-5 核心標籤庫的核心標籤庫的 URLURL 處理標處理標籤籤

6-5-1 <c:url>6-5-1 <c:url> 標籤建立標籤建立 URLURL 網址網址 6-5-2 <c:redirect>6-5-2 <c:redirect> 標籤轉址到其它網址標籤轉址到其它網址 6-5-3 <c:import>6-5-3 <c:import> 標籤匯入標籤匯入 URLURL

Page 33: 第 6 章  JSTL標籤建立JSP程式

6-5-1 <c:url>6-5-1 <c:url> 標籤建立標籤建立 URLURL 網址網址 --語法語法

<c:url><c:url> 標籤可以執行編碼來建立正確的標籤可以執行編碼來建立正確的 URLURL 網網址字串,以免址字串,以免 URLURL 網址中的空白字元或特殊符號,網址中的空白字元或特殊符號,造成造成 WebWeb伺服器無法識別的錯誤,其基本語法如伺服器無法識別的錯誤,其基本語法如下所示:下所示:

<c:url value="URL" context="/Web<c:url value="URL" context="/Web 應用程式應用程式 "" var="name" scope="scope">var="name" scope="scope"> <c:param name="name1“<c:param name="name1“ value="value1"/>value="value1"/> ………… ………… <c:param name="nameN“<c:param name="nameN“ value="valueN"/>value="valueN"/></c:url></c:url>

Page 34: 第 6 章  JSTL標籤建立JSP程式

6-5-1 <c:url>6-5-1 <c:url> 標籤建立標籤建立 URLURL 網址網址 --範例範例

<c:url><c:url> 標籤需要使用標籤需要使用 <c:param><c:param> 標籤建立擁標籤建立擁有參數的有參數的 URLURL 網址,如下所示:網址,如下所示:

<c:url value="/Ch4_2_1.jsp" <c:url value="/Ch4_2_1.jsp" context="/Ch04">context="/Ch04">

<c:param name="name" value="joe"/><c:param name="name" value="joe"/> <c:param name="email" <c:param name="email"

value="[email protected]"/>value="[email protected]"/></c:url></c:url> 上述上述 valuevalue 屬性的基礎網址可以是屬性的基礎網址可以是 HTTPHTTP 通訊協通訊協

定的網址。定的網址。 contextcontext 屬性表示是位在其它屬性表示是位在其它 WebWeb應用程式,以此例是應用程式,以此例是 /Ch04/Ch04,, varvar 屬性可以將處屬性可以將處理後的理後的 URLURL 網址存入此範圍變數。網址存入此範圍變數。

Page 35: 第 6 章  JSTL標籤建立JSP程式

6-5-2 <c:redirect>6-5-2 <c:redirect> 標籤轉址到其它標籤轉址到其它網址網址 -- 語法語法

<c:redirect><c:redirect> 標籤可以轉址到其它標籤可以轉址到其它 URLURL 網址或網址或是其它是其它 WebWeb 應用程式的應用程式的 JSPJSP 程式,並且傳遞參程式,並且傳遞參數,其基本語法如下所示:數,其基本語法如下所示:

<c:redirect url="URL" <c:redirect url="URL" context="/Webcontext="/Web 應用程式應用程式 ">"> <c:param name="name1" <c:param name="name1" value="value1"/>value="value1"/> ………… ………… <c:param name="nameN“<c:param name="nameN“ value="valueN"/>value="valueN"/></c:redirect></c:redirect>

Page 36: 第 6 章  JSTL標籤建立JSP程式

6-5-2 <c:redirect>6-5-2 <c:redirect> 標籤轉址到其它標籤轉址到其它網址網址 -- 範例範例

當當 <c:redirect><c:redirect> 標籤轉址到其它網址時,也可標籤轉址到其它網址時,也可以傳遞參數,就是使用以傳遞參數,就是使用 <c:param><c:param> 標籤新增這標籤新增這些參數,如下所示:些參數,如下所示:

<c:redirect url="Ch6_5_2.jsp"><c:redirect url="Ch6_5_2.jsp">

<c:param name="type" value="2"/><c:param name="type" value="2"/>

</c:redirect></c:redirect> 上述上述 urlurl 屬性指定轉址到屬性指定轉址到 HTTPHTTP 通訊協定的通訊協定的 URLURL

網址,例如:網址,例如: http://www.hinet.nethttp://www.hinet.net ,或是,或是 JSPJSP程式的相對路徑,內含程式的相對路徑,內含 <c:param><c:param> 標籤的標籤的 URLURL參數參數 typetype 。。

Page 37: 第 6 章  JSTL標籤建立JSP程式

6-5-3 <c:import>6-5-3 <c:import> 標籤匯入標籤匯入 URL-URL- 語語法法

<c:import><c:import> 標籤是一個加強版本的標籤是一個加強版本的<jsp:include><jsp:include> 動作元素,可以在動作元素,可以在 JSPJSP 程式的執程式的執行階段將其它網頁內容插入行階段將其它網頁內容插入 JSPJSP 程式,同樣也可以程式,同樣也可以傳遞參數,其基本語法如下所示:傳遞參數,其基本語法如下所示:

<c:import url="URL" context="/Web<c:import url="URL" context="/Web 應用程應用程式式 ""

charEncoding="charEncoding=" 運算式運算式 " var="name“" var="name“ scope-"scope">scope-"scope"> <c:param name="name1“<c:param name="name1“ value="value1"/>value="value1"/> ………… …………</c:import></c:import>

Page 38: 第 6 章  JSTL標籤建立JSP程式

6-5-3 <c:import>6-5-3 <c:import> 標籤匯入標籤匯入 URL-URL- 範範例例

<c:import><c:import> 標籤的標籤的 urlurl 屬性支援屬性支援 FTPFTP 通訊協定,通訊協定,假設假設 FTPFTP站台的網址為站台的網址為 ftp://ftp.company.comftp://ftp.company.com ,,在其根目錄有一個名為在其根目錄有一個名為 test.txttest.txt ,此時在,此時在 JSPJSP 網網頁插入頁插入 FTPFTP檔案的標籤,如下所示:檔案的標籤,如下所示:

<c:import <c:import url="ftp://ftp.company.com/test.txt"/>url="ftp://ftp.company.com/test.txt"/>

如果在目前如果在目前WebWeb 應用程式的根目錄下有一個名應用程式的根目錄下有一個名為為 Ch6_5_3.txtCh6_5_3.txt 的文字檔案,我們也可以使用的文字檔案,我們也可以使用<c:import><c:import> 標籤來插入,如下所示:標籤來插入,如下所示:

<c:import url="/Ch6_5_3.txt" <c:import url="/Ch6_5_3.txt" charEncoding="MS950"/>charEncoding="MS950"/>

Page 39: 第 6 章  JSTL標籤建立JSP程式

6-6 6-6 格式標籤庫的日期與數值格式格式標籤庫的日期與數值格式 6-6-1 6-6-1 日期格式標籤日期格式標籤 6-6-2 6-6-2 數值格式標籤數值格式標籤

Page 40: 第 6 章  JSTL標籤建立JSP程式

6-6 6-6 格式標籤庫的日期與數值格式格式標籤庫的日期與數值格式 JSTLJSTL 的格式標籤庫提供格式化日期或數值的格式標籤庫提供格式化日期或數值

資料的相關標籤,可以將字串資料剖析轉資料的相關標籤,可以將字串資料剖析轉換成日期或數值資料。在換成日期或數值資料。在 JSPJSP 程式請先使程式請先使用用 taglibtaglib 指引元素匯入格式標籤庫的指引元素匯入格式標籤庫的 URIURI ,,如下所示:如下所示:

<%@ taglib <%@ taglib

uri="http://java.sun.com/jsp/jstl/fmt“uri="http://java.sun.com/jsp/jstl/fmt“

prefix="fmt" %>prefix="fmt" %>

Page 41: 第 6 章  JSTL標籤建立JSP程式

6-6-1 6-6-1 日期格式標籤日期格式標籤 --<fmt:formatDate><fmt:formatDate> 標籤標籤 (( 語法語法 ))

<fmt:formatDate><fmt:formatDate> 標籤是用來格式化日期標籤是用來格式化日期 //時間時間資料,以指定格式來顯示日期資料,以指定格式來顯示日期 //時間資料,屬於一時間資料,屬於一種資料輸出標籤,其基本語法如下所示:種資料輸出標籤,其基本語法如下所示:

<fmt:formatDate value="<fmt:formatDate value=" 運算式運算式““ timeZone="timeZone=" 運算式運算式 "" type="type="欄位欄位 " dateStyle="" dateStyle=" 日期格式日期格式 "" timeStyle="timeStyle=" 時間樣式時間樣式 " pattern="" pattern=" 格式範本格式範本 "" var="name" scope="scope"/>var="name" scope="scope"/> 上述上述 <fmt:formatDate><fmt:formatDate> 標籤可以將標籤可以將 valuevalue 屬性屬性

的日期的日期 //時間資料,以指定的時區、樣式或範本來時間資料,以指定的時區、樣式或範本來顯示,或是存入顯示,或是存入 varvar 屬性的範圍變數。屬性的範圍變數。

Page 42: 第 6 章  JSTL標籤建立JSP程式

6-6-1 6-6-1 日期格式標籤日期格式標籤 --<fmt:formatDate><fmt:formatDate> 標籤標籤 (( 範例範例 ))

在在 JSPJSP 程式取得程式取得 java.util.Datejava.util.Date 物件物件 nownow 後,後,就可以使用就可以使用 <fmt:formatDate><fmt:formatDate> 標籤格式化輸標籤格式化輸出的日期出的日期 //時間資料,如下所示:時間資料,如下所示:

<jsp:useBean id="now" <jsp:useBean id="now" class="java.util.Date"/>class="java.util.Date"/><fmt:formatDate type="time“<fmt:formatDate type="time“ value="${now}"/>value="${now}"/><fmt:formatDate type="date“<fmt:formatDate type="date“ value="${now}" value="${now}" dateStyle="full"/>dateStyle="full"/>

Page 43: 第 6 章  JSTL標籤建立JSP程式

6-6-1 6-6-1 日期格式標籤日期格式標籤 --<fmt:parseDate><fmt:parseDate> 標籤標籤 (( 語法語法 ))

<fmt:parseDate><fmt:parseDate> 標籤可以將字串剖析成日標籤可以將字串剖析成日期期 //時間值,這是一種資料輸入標籤,可以將結時間值,這是一種資料輸入標籤,可以將結果儲存在範圍變數,其基本語法如下所示:果儲存在範圍變數,其基本語法如下所示:

<fmt:parseDate value="<fmt:parseDate value=" 運算式運算式““

timeZone="timeZone=" 運算式運算式 ""

type="type="欄位欄位 " dateStyle="" dateStyle=" 日期格式日期格式 ""

timeStyle="timeStyle=" 時間樣式時間樣式 " pattern="" pattern=" 格式範格式範本本 ""

parseLocal="parseLocal=" 運算式運算式 ""

var="name" scope="scope"/>var="name" scope="scope"/>

Page 44: 第 6 章  JSTL標籤建立JSP程式

6-6-1 6-6-1 日期格式標籤日期格式標籤 --<fmt:parseDate><fmt:parseDate> 標籤標籤 (( 範例範例 ))

JSPJSP 程式在指定日期程式在指定日期 //時間的字串變數時間的字串變數 currentcurrent ,,就可以使用就可以使用 <fmt:parseDate><fmt:parseDate> 標籤剖析日期標籤剖析日期 //時間資料,如下所示:時間資料,如下所示:

<c:set var="current" <c:set var="current"

value="11/01/2004"/>value="11/01/2004"/>

<fmt:parseDate var="pubDate“<fmt:parseDate var="pubDate“

value="${current}" value="${current}"

pattern="MM/dd/yy"/>pattern="MM/dd/yy"/> 上述標籤使用範本字串上述標籤使用範本字串 MM/dd/yyMM/dd/yy 來剖析日期來剖析日期 //

時間資料,然後將值儲存到時間資料,然後將值儲存到 pubDatepubDate 變數。變數。

Page 45: 第 6 章  JSTL標籤建立JSP程式

6-6-2 6-6-2 數值格式標籤數值格式標籤 --<fmt:formatNumber><fmt:formatNumber> 標籤標籤 (( 語法語法 ))

<fmt:formatNumber><fmt:formatNumber> 標籤是用來格式化顯示標籤是用來格式化顯示的數值資料,其基本語法如下所示:的數值資料,其基本語法如下所示:

<fmt:formatNumber value="<fmt:formatNumber value=" 運算式運算式 " " type="type=" 種類種類 " groupingUsed="" groupingUsed=" 運算式運算式““ pattern="pattern=" 格式範本格式範本 " currencyCode="" currencyCode=" 運算運算式式 ""

currencySymbol="currencySymbol=" 運算式運算式 "" maxIntegerDigits="maxIntegerDigits=" 運算式運算式 " "

minIntegerDigits="minIntegerDigits=" 運算式運算式 "" maxFractionDigits="maxFractionDigits=" 運算式運算式 " "

minFractionDigits="minFractionDigits=" 運算式運算式 "" var="name" scope="scope"/>var="name" scope="scope"/>

Page 46: 第 6 章  JSTL標籤建立JSP程式

6-6-2 6-6-2 數值格式標籤數值格式標籤 --<fmt:formatNumber><fmt:formatNumber> 標籤標籤 (( 範例範例 ))

在在 JSPJSP 程式可以使用程式可以使用 <fmt:formatNumber><fmt:formatNumber> 標標籤來格式化輸出數值資料,如下所示:籤來格式化輸出數值資料,如下所示:

<fmt:formatNumber value="${amount}" <fmt:formatNumber value="${amount}" type="number"/>/type="number"/>/

<fmt:formatNumber value="${total}" <fmt:formatNumber value="${total}"

maxIntegerDigits="7"maxIntegerDigits="7"

minIntegerDigits="3"/>minIntegerDigits="3"/> 上述標籤以數值和最大整數位數上述標籤以數值和最大整數位數 77 ,最小為,最小為 33 的的

格式來顯示數值資料。格式來顯示數值資料。

Page 47: 第 6 章  JSTL標籤建立JSP程式

6-6-2 6-6-2 數值格式標籤數值格式標籤 --<fmt:parseNumber><fmt:parseNumber> 標籤標籤 (( 語法語法 ))

<fmt:parseNumber><fmt:parseNumber> 標籤可以將字串剖標籤可以將字串剖析成數值,其基本語法如下所示:析成數值,其基本語法如下所示:

<fmt:parseNumber value="<fmt:parseNumber value=" 運算式運算式 " " type="type=" 種類種類 " " pattern="pattern=" 格式範本格式範本 "" parseLocale="parseLocale=" 運算式運算式 " " integerOnly="integerOnly=" 運算式運算式 "" var="name" scope="scope"/>var="name" scope="scope"/>

Page 48: 第 6 章  JSTL標籤建立JSP程式

6-6-2 6-6-2 數值格式標籤數值格式標籤 --<fmt:parseNumber><fmt:parseNumber> 標籤標籤 (( 範例範例 ))

JSPJSP 程式在指定數值變數程式在指定數值變數 orderorder ,就可以使,就可以使用用 <fmt:parseNumber><fmt:parseNumber> 標籤剖析數值標籤剖析數值資料,如下所示:資料,如下所示:

<c:set var="order" value="15.5" /><c:set var="order" value="15.5" />

<fmt:parseNumber value="${order}" <fmt:parseNumber value="${order}" integerOnly="true"/>integerOnly="true"/>

上述標籤只剖析出數值的整數部分。上述標籤只剖析出數值的整數部分。

Page 49: 第 6 章  JSTL標籤建立JSP程式

6-7 6-7 格式標籤庫的國際化設定格式標籤庫的國際化設定 6-7-1 6-7-1 時區設定標籤時區設定標籤 6-7-2 6-7-2 語系的地區設定標籤語系的地區設定標籤 6-7-3 6-7-3 國際化訊息標籤國際化訊息標籤

Page 50: 第 6 章  JSTL標籤建立JSP程式

6-7-1 6-7-1 時區設定標籤時區設定標籤 --<fmt:setTimeZone><fmt:setTimeZone> 標籤標籤 (( 語法語法 ))

<fmt:setTimeZone><fmt:setTimeZone> 標籤可以指定其它標籤可以指定其它fmtfmt 格式標籤預設使用的時區,其基本語格式標籤預設使用的時區,其基本語法如下所示:法如下所示:

<fmt:setTimeZone value="<fmt:setTimeZone value=" 運算式運算式 " "

var="name" scope="scope"/>var="name" scope="scope"/> 上述上述 <fmt:setTimeZone><fmt:setTimeZone> 標籤指定標籤指定

valuevalue 屬性使用的時區值。屬性使用的時區值。

Page 51: 第 6 章  JSTL標籤建立JSP程式

6-7-1 6-7-1 時區設定標籤時區設定標籤 --<fmt:setTimeZone><fmt:setTimeZone> 標籤標籤 (( 範例範例 ))

在在 JSPJSP 程式可以使用程式可以使用<fmt:setTimeZone><fmt:setTimeZone> 標籤指定預設時區,標籤指定預設時區,例如:指定成例如:指定成 ESTEST 時區,如下所示:時區,如下所示:

<c:set var="zone" value="EST" <c:set var="zone" value="EST" scope="session"/>scope="session"/>

上述標籤指定目前預設的時區為上述標籤指定目前預設的時區為 valuevalue 屬屬性的性的 ESTEST,, scopescope 屬性將預設時區加入使屬性將預設時區加入使用者的交談期(用者的交談期( SessionSession ),換句話說,),換句話說,預設時區直到使用者交談期結束為止都有預設時區直到使用者交談期結束為止都有效。效。

Page 52: 第 6 章  JSTL標籤建立JSP程式

6-7-1 6-7-1 時區設定標籤時區設定標籤 --<fmt:timeZone><fmt:timeZone> 標籤標籤 (( 語法語法 ))

<fmt:timeZone><fmt:timeZone> 標籤可以指定其子標籤標籤可以指定其子標籤使用的時區,其基本語法如下所示:使用的時區,其基本語法如下所示:

<fmt:timeZone value="<fmt:timeZone value=" 運算式運算式 ">"> BodyBody</fmt:timeZone></fmt:timeZone> 上述上述 <fmt:timeZone><fmt:timeZone> 標籤可以指定標籤可以指定

valuevalue 屬性使用的時區值,此時在屬性使用的時區值,此時在 BodyBody中的子標籤就是使用此時區,但是只限於中的子標籤就是使用此時區,但是只限於子標籤的範圍有效。子標籤的範圍有效。

Page 53: 第 6 章  JSTL標籤建立JSP程式

6-7-1 6-7-1 時區設定標籤時區設定標籤 --<fmt:timeZone><fmt:timeZone> 標籤標籤 (( 範例範例 ))

在在 JSPJSP 程式可以使用程式可以使用 <fmt:timeZone><fmt:timeZone> 標籤指標籤指定部分標籤來使用不同的時區,例如:在預設定部分標籤來使用不同的時區,例如:在預設ESTEST 時區之中,有部分格式標籤需要使用時區之中,有部分格式標籤需要使用 MSTMST 時時區,如下所示:區,如下所示:

<fmt:timeZone value="MST"><fmt:timeZone value="MST"><fmt:formatDate type="time“<fmt:formatDate type="time“ value="${now}"/>value="${now}"/><fmt:formatDate type="date“<fmt:formatDate type="date“ value="${now}"/><br>value="${now}"/><br></fmt:timeZone></fmt:timeZone> 上述標籤指定其子標籤的時區為上述標籤指定其子標籤的時區為 valuevalue 屬性的屬性的

MSTMST 。。

Page 54: 第 6 章  JSTL標籤建立JSP程式

6-7-2 6-7-2 語系的地區設定標籤語系的地區設定標籤 -- 語語法法

在格式格式標籤庫提供在格式格式標籤庫提供 <fmt:setLocale><fmt:setLocale>標籤可以指定使用者所在語系的地區,其標籤可以指定使用者所在語系的地區,其基本語法如下所示:基本語法如下所示:

<fmt:setLocale value="<fmt:setLocale value=" 運算式運算式 " "

variant="name" scope="scope"/>variant="name" scope="scope"/> 上述上述 <fmt:setLocale><fmt:setLocale> 標籤指定標籤指定 valuevalue

屬性使用的語系地區值。屬性使用的語系地區值。

Page 55: 第 6 章  JSTL標籤建立JSP程式

6-7-2 6-7-2 語系的地區設定標籤語系的地區設定標籤 -- 範範例例

在在 JSPJSP 程式可以使用程式可以使用 <fmt:setLocale><fmt:setLocale>標籤指定預設的語系地區,例如:指定成標籤指定預設的語系地區,例如:指定成enen 英文的語系地區,如下所示:英文的語系地區,如下所示:

<fmt:setLocale value="en" <fmt:setLocale value="en" scope="session"/>scope="session"/>

上述標籤指定目前預設的語系地區為上述標籤指定目前預設的語系地區為valuevalue 屬性的屬性的 enen 。。

Page 56: 第 6 章  JSTL標籤建立JSP程式

6-7-3 6-7-3 國際化訊息標籤國際化訊息標籤 -- 說明說明 JSTLJSTL 的國際化訊息標籤是使用的國際化訊息標籤是使用 <fmt:message><fmt:message>和和 <fmt:param><fmt:param> 標籤,這標籤,這 22 個標籤可以從指定個標籤可以從指定語系地區的「資源包」(語系地區的「資源包」( Resource BundleResource Bundle ))取出訊息文字在取出訊息文字在 JSPJSP 程式顯示,換句話說,只需程式顯示,換句話說,只需針對不同語系建立專屬的訊息文字,就可以讓同針對不同語系建立專屬的訊息文字,就可以讓同一個一個 JSPJSP 程式顯示國際化的訊息文字。程式顯示國際化的訊息文字。

當建立好資源包後,當建立好資源包後, JSTLJSTL 是使用是使用<fmt:bundle><fmt:bundle>和和 <fmt:setBoundle><fmt:setBoundle> 標籤來標籤來指定使用的資源包名稱,以便指定使用的資源包名稱,以便 <fmt:message><fmt:message>標籤可以取出指定語系地區的訊息文字。標籤可以取出指定語系地區的訊息文字。

Page 57: 第 6 章  JSTL標籤建立JSP程式

6-7-3 6-7-3 國際化訊息標籤國際化訊息標籤 --英文資源包英文資源包 資源包(資源包( Resource BundleResource Bundle )是用來儲存指定)是用來儲存指定

語系地區的訊息文字,這是一些位在「語系地區的訊息文字,這是一些位在「 WEB-WEB-INF/classesINF/classes」資料夾,副檔名為」資料夾,副檔名為 .properties.properties的檔案,英文的檔案,英文 enen 的檔案名稱是的檔案名稱是Ch6_7_2_en.propertiesCh6_7_2_en.properties ,其內容如下所示:,其內容如下所示:

hello=Hello!hello=Hello!name=Joe Chenname=Joe Chentoday=Today: {0,date}today=Today: {0,date} 在上述在上述 "=""=" 等號前為訊息的等號前為訊息的 33 個個 KeyKey 鍵,之後就鍵,之後就

是訊息內容的值,這就是是訊息內容的值,這就是 <fmt:message><fmt:message> 標籤標籤以指定以指定 KeyKey 鍵來取出的訊息內容。鍵來取出的訊息內容。

Page 58: 第 6 章  JSTL標籤建立JSP程式

6-7-3 6-7-3 國際化訊息標籤國際化訊息標籤 -- 中文資源包中文資源包 中文中文 (( 台灣台灣 )zh_TW)zh_TW 的檔案名稱為的檔案名稱為

Ch6_7_2.zh_TW.propertiesCh6_7_2.zh_TW.properties ,其內容如下所示:,其內容如下所示:hello=\u5927\u5bb6\u597d!hello=\u5927\u5bb6\u597d!

name=\u9673\u6703\u5b89name=\u9673\u6703\u5b89

today=\u4eca\u5929: {0, date}today=\u4eca\u5929: {0, date} 上述檔案內容擁有相同的上述檔案內容擁有相同的 33 個個 KeyKey 鍵,因為訊息鍵,因為訊息

是中文內容,所以需要編碼成是中文內容,所以需要編碼成 UnicodeUnicode ,我們可,我們可以使用以使用 JDKJDK的的 native2ascii.exenative2ascii.exe 工具程式來進工具程式來進行編碼。行編碼。

Page 59: 第 6 章  JSTL標籤建立JSP程式

6-7-3 6-7-3 國際化訊息標籤國際化訊息標籤 --<fmt:message><fmt:message>與與 <fmt:param><fmt:param> 標標

籤籤 <fmt:message><fmt:message> 標籤可以顯示指定資源包標籤可以顯示指定資源包(( Resource BundleResource Bundle )中的訊息文字,其基本語法)中的訊息文字,其基本語法如下所示:如下所示:

<fmt:message key="<fmt:message key=" 運算式運算式 " bundle="" bundle=" 運算式運算式 " "

var="name" scope="scope"/>var="name" scope="scope"/>

<fmt:message key="<fmt:message key=" 運算式運算式 " bundle="" bundle=" 運算式運算式 " "

var="name" scope="scope">var="name" scope="scope">

<fmt:param value="<fmt:param value=" 運算式運算式 "/>"/>

…… ……....

</fmt:message></fmt:message>

Page 60: 第 6 章  JSTL標籤建立JSP程式

6-7-3 6-7-3 國際化訊息標籤國際化訊息標籤 --<fmt:setBundle><fmt:setBundle> 標籤標籤

<fmt:setBundle><fmt:setBundle> 標籤可以指定預設資標籤可以指定預設資源包(源包( Resource BundleResource Bundle ),其基本語法),其基本語法如下所示:如下所示:

<fmt:setBundle basename="<fmt:setBundle basename=" 運算式運算式 " "

var="name" scope="scope"/>var="name" scope="scope"/> 上述上述 <fmt:setBundle><fmt:setBundle> 標籤指定位在標籤指定位在

basenamebasename 屬性的資源包。屬性的資源包。

Page 61: 第 6 章  JSTL標籤建立JSP程式

6-7-3 6-7-3 國際化訊息標籤國際化訊息標籤 --<fmt:bundle><fmt:bundle> 標籤標籤

<fmt:bundle><fmt:bundle> 標籤可以指定其子標籤使用的資標籤可以指定其子標籤使用的資源包(源包( Resource BundleResource Bundle ),其基本語法如下),其基本語法如下所示:所示:

<fmt:bundle basename="<fmt:bundle basename=" 運算式運算式 " "

prefix="prefix=" 運算式運算式 ">">

BodyBody

</fmt:bundle></fmt:bundle> 上述上述 <fmt:bundle><fmt:bundle> 標籤可以指定標籤可以指定 basenamebasename

屬性使用的資源包,此時在屬性使用的資源包,此時在 BodyBody 中的子標籤就中的子標籤就是使用此資源包,但是只限於子標籤的範圍有效。是使用此資源包,但是只限於子標籤的範圍有效。