Presentation is loading. Please wait.

Presentation is loading. Please wait.

第6章 JSTL標籤建立JSP程式 6-1 JSTL標籤庫 6-2 核心標籤庫的一般用途標籤 6-3 核心標籤庫的條件標籤

Similar presentations


Presentation on theme: "第6章 JSTL標籤建立JSP程式 6-1 JSTL標籤庫 6-2 核心標籤庫的一般用途標籤 6-3 核心標籤庫的條件標籤"— Presentation transcript:

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

2 6-1 JSTL標籤庫 6-1-1 JSTL 1.1版標籤庫 6-1-2 在JSP程式使用JSTL標籤

3 6-1-1 JSTL 1.1版標籤庫-種類 JSTL 1.1版標籤庫(Tag Libraries)依其不同用途,可以分為五種標籤庫,如下表所示:

4 6-1-1 JSTL 1.1版標籤庫-說明1 核心標籤庫(Core)
核心標籤庫包含EL範圍變數的建立和刪除標籤、錯誤處理和一般程式語言流程控制的條件和迴圈標籤。 URL處理標籤可以使用在交談期追蹤(Session Tracking),和執行階段插入指定URL網址的網頁或轉址到其它URL網址。 格式標籤庫(I18N Formattiong) 格式標籤庫提供資料格式和剖析的相關標籤,支援國際化格式I18N,以便符合不同地區的資料格式差異,包含國際化編碼、訊息、數值和日期格式等相關標籤。

5 6-1-1 JSTL 1.1版標籤庫-說明2 XML處理標籤庫(XML Processing)
XML處理標籤庫如同其名,就是在處理XML文件、支援XML剖析、XSTL轉換和XPath取出指定資料。 資料庫存取標籤庫(Database Access) 資料庫存取標籤庫提供標籤執行SQL指令來存取關聯式資料庫,可以在JSP程式輕鬆執行SQL查詢、更新和取得查詢結果,並且支援交易(Transaction)處理的相關標籤。 函數標籤庫(Functions) 函數標籤庫提供字串處理的相關函數,可以在EL運算式直接使用JSTL標籤庫的函數來執行字串處理。

6 6-1-2 在JSP程式使用JSTL標籤 在JSP程式使用JSTL標籤庫需要使用taglib指引元素匯入指定URI的標籤庫。例如:匯入核心標籤庫的taglib指令,如下所示: taglib uri=" prefix="c" %> 上述指令的uri屬性是標籤庫的預設URI,prefix屬性對應字首(Prefix)。在匯入標籤庫後,就可以使用JSTL核心標籤庫,其基本語法如下所示: <c:tagname attribute=" "…> 上述標籤以字首"c"開頭,在":"後是標籤名稱和屬性清單。

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

8 6-2-1 <c:out>標籤輸出資料-語法
<c:out>標籤可以將value屬性值的文字值或EL運算式進行運算,將運算結果的null或String字串文字值送到瀏覽程式顯示,其功能類似JSP的Expression元素。其基本語法如下所示: <c:out value="運算式" escapeXml="boolean“ default="運算式"/>

9 6-2-1 <c:out>標籤輸出資料-範例
<c:out>標籤的default屬性可以用來作為一種錯誤處理機制,當value屬性值為null時,就顯示default屬性值,其寫法有兩種,如下所示: <c:out value="${param.name}" default="網頁設計"/> <c:out value="${myName}"> 陳會安 </c:out> 上述default屬性值可以是<c:out>標籤的屬性,或是位在<c:out>和</c:out>標籤之中的字串內容。

10 6-2-2 <c:set>標籤建立變數-語法
JSTL的<c:set>標籤提供標籤語法來建立和指定範圍變數值,其基本語法如下所示: <c:set var="name" value="運算式" scope="scope" target="beans_object“ property="property_name"/>

11 6-2-2 <c:set>標籤建立變數-範例1
建立和指定範圍變數值 在<c:set>標籤是使用var、value和scope屬性建立範圍變數,如下所示: <c:set var="code" value="02"/> <c:set var="number"> </c:set> <c:set var="phone" value="(${code})-${number}"/> 上述<c:set>標籤建立範圍變數areacode、number和phone,phone變數值是EL運算式,因為沒有使用scope屬性,所以預設為Page範圍變數。

12 6-2-2 <c:set>標籤建立變數-範例2
修改JavaBeans或Map物件的屬性 <c:set>標籤修改物件屬性是使用target、property和value屬性,如下所示: <jsp:useBean id="list" class="java.util.TreeMap" /> <c:set target="${list}" property="Joe" value="陳會安" /> <c:set target="${list}" property="Tom" value="張無忌" /> 上述標籤是使用<jsp:useBean>動作元素建立TreeMap集合物件,然後使用<c:set>標籤新增集合物件的2個元素,property屬性的Joe和Tom是鍵,value屬性是值。

13 6-2-3 <c:remove>標籤移除變數-說明
<c:remove var="name" scope="scope"/>

14 6-2-3 <c:remove>標籤移除變數-範例
<c:remove>標籤如果沒有指定scope屬性,就是刪除Page範圍的變數,如下所示: <c:remove var="var2"/> 上述標籤刪除Page範圍名為var2的變數。因為不同範圍可能擁有同名的變數,所以,刪除指定範圍的變數請使用scope屬性。例如:刪除Request範圍的var1變數,如下所示: <c:remove var="var1" scope="request"/>

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

16 6-3-1 <c:if>標籤的是否選條件-語法
<c:if>標籤類似Java的if條件敘述,可以建立是否選條件,其基本語法如下所示: <c:if test="運算式" var="name" scope="scope"> Body </c:if> 上述<c:if>標籤的條件如果成立,就執行<c:if>和</c:if>標籤中的Body部分;不成立,就不執行。

17 6-3-1 <c:if>標籤的是否選條件-語法
<c:if>標籤的test屬性是一個條件的EL運算式,如果運算結果為true,就執行之中的Body內容,如下所示: <c:if test="${score >= 60}"> JSP網頁製作徹底研究-及格!<br> </c:if> 上述test屬性的條件如為true,就顯示之中的標籤內容。如果在<c:if>標籤使用var和scope屬性,即可使用變數記錄條件判斷結果為true或 false。

18 6-3-2 <c:choose>標籤的多選一條件-語法
<c:choose>標籤類似Java的switch條件敘述,可以建立多選一條件,其基本語法如下所示: <c:choose> <c:when test="運算式"> Body </c:when> ………… <c:otherwise> </c:otherwise> </c:choose>

19 6-3-2 <c:choose>標籤的多選一條件-範例
例如:GPA成績範圍判斷的<c:choose>標籤,如下所示: <c:choose> <c:when test="${grade == 'A'}"> 學生成績超過80分<br> </c:when> <c:when test="${grade == 'B'}"> 學生成績為70~79分<br> ……… <c:otherwise> 學生成績低於60分<br> </c:otherwise> </c:choose>

20 6-3-3 巢狀的條件標籤 在<c:if>和<c:when>條件標籤之中還可以擁有其它<c:if>和<c:choose>標籤,稱為巢狀條件標籤,如下所示: <c:if test="${age >= 1 && age <= 100}"> <c:choose> <c:when test="${age <= 18}"> 學生票:12元<br> </c:when> <c:when test="${age < 65 && age > 18}"> 普通票:15元<br> <c:otherwise> 敬老票:8元<br> </c:otherwise> </c:choose> </c:if>

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

22 6-4-1 <c:forEach>標籤-語法
<c:forEach>迴圈標籤可以取出陣列或集合物件的所有元素,也可以如同Java的for迴圈敘述成為一個計數迴圈,其基本語法如下所示: <c:forEach var="name" items="運算式" begin="運算式" end="運算式" step="運算式"> Body </c:forEach>

23 6-4-1 <c:forEach>標籤-語法說明
<c:forEach>標籤如果指定items屬性的陣列或集合物件元素,這種操作稱為「迭代」(Iteration),即每執行一次迴圈取出一個元素儲存在var屬性的範圍變數,然後執行Body內容。 當標籤指定begin、end和step屬性,就可以限制迴圈只取出從begin的開始元素,到end的結束元素,以step的增量執行迭代(Iteration)。 若沒有指定items屬性,begin、end和step屬性就是一種計數迴圈。

24 6-4-1 <c:forEach>標籤-範例1
取出集合物件的所有元素 <c:forEach>標籤可以取出Java集合物件的所有元素。例如:取出TreeMap物件list的所有元素,如下所示: <c:forEach var="item" items="${list}"> [<c:out value="${item.key}"/>] (<c:out value="${list[item.key]}"/>) </c:forEach> 上述var屬性的item變數可以取出每一次迴圈的集合物件元素,然後顯示元素的鍵和值。

25 6-4-1 <c:forEach>標籤-範例2
取出指定範圍的陣列元素 在<c:forEach>標籤加上begin、end和step屬性就可以取出陣列的部分元素,如下所示: <c:forEach var="item" items="${array}" begin="1" end="2" step="1"> [<c:out value="${item}"/>] </c:forEach> 上述var屬性的item變數可以取出每一次迴圈的陣列元素,其範圍是從1~2,即顯示第2到第3個陣列元素。

26 6-4-1 <c:forEach>標籤-範例3
計數迴圈 在<c:forEach>標籤如果沒有items屬性,而只有指定begin、end和step屬性就成為一個計數迴圈。例如:顯示1~5的計數迴圈,如下所示: <c:forEach var="current" begin="1" end="5" step="1"> [<c:out value="${current}"/>] </c:forEach>

27 6-4-2 <c:forTokens>標籤-語法
<c:forTokens>標籤可以將範圍變數的字串使用分隔字元(Delimiter)來進行分割,我們可以將它視為是一種在字串中執行的迭代(Iteration),其基本語法如下所示: <c:forTokens var="name" items="運算式“ delims="運算式" begin="運算式" end="運算式" step="運算式"> Body </c:forTokens>

28 6-4-2 <c:forTokens>標籤-語法說明
<c:forTokens>標籤的items屬性是一個擁有delims屬性分隔字元的字串,每執行一次迴圈取出一個以分隔字元分割出的元素,然後將它儲存在var屬性的範圍變數,然後執行Body內容。 在標籤如果同時指定begin、end和step屬性,將限制取出begin的開始元素,到end的結束元素,以step的增量執行迭代(Iteration)。

29 6-4-2 <c:forTokens>標籤-範例
<c:Tokens>標籤的begin、end和step屬性與<c:forEach>標籤相同,請參閱上一節的說明。例如:使用","分隔字元來分割"1,2,3:4:5,6#7,8"字串的<c:forTokens>標籤,如下所示: <c:forTokens var="token" items="${str}" delims=","> [<c:out value="${token}"/>] </c:forTokens>

30 6-4-3 迴圈標籤的varStatus屬性-說明
<c:forEach>和<c:forTokens>標籤都擁有varStatus屬性,可以顯示迴圈執行狀態,當使用varStatus屬性將狀態存入指定的範圍變數status後,就可以使用相關屬性取得迴圈狀態,如下所示: <c:forEach var="item" items="${list}" varStatus="status"> [<c:out value="${item.key}"/>] (<c:out value="${list[item.key]}"/>)<br> <b>index:</b> ${status.index} <b>count:</b> ${status.count} <b>first:</b> ${status.first} <b>last: </b> ${status.last}<br> </c:forEach>

31 6-4-3 迴圈標籤的varStatus屬性-屬性說明
index、count、first和last屬性的狀態說明,如下表所示:

32 6-5 核心標籤庫的URL處理標籤 6-5-1 <c:url>標籤建立URL網址
6-5-2 <c:redirect>標籤轉址到其它網址 6-5-3 <c:import>標籤匯入URL

33 6-5-1 <c:url>標籤建立URL網址-語法
<c:url>標籤可以執行編碼來建立正確的URL網址字串,以免URL網址中的空白字元或特殊符號,造成Web伺服器無法識別的錯誤,其基本語法如下所示: <c:url value="URL" context="/Web應用程式" var="name" scope="scope"> <c:param name="name1“ value="value1"/> ………… <c:param name="nameN“ value="valueN"/> </c:url>

34 6-5-1 <c:url>標籤建立URL網址-範例
<c:url>標籤需要使用<c:param>標籤建立擁有參數的URL網址,如下所示: <c:url value="/Ch4_2_1.jsp" context="/Ch04"> <c:param name="name" value="joe"/> <c:param name=" " </c:url> 上述value屬性的基礎網址可以是HTTP通訊協定的網址。context屬性表示是位在其它Web應用程式,以此例是/Ch04,var屬性可以將處理後的URL網址存入此範圍變數。

35 6-5-2 <c:redirect>標籤轉址到其它網址-語法
<c:redirect>標籤可以轉址到其它URL網址或是其它Web應用程式的JSP程式,並且傳遞參數,其基本語法如下所示: <c:redirect url="URL" context="/Web應用程式"> <c:param name="name1" value="value1"/> ………… <c:param name="nameN“ value="valueN"/> </c:redirect>

36 6-5-2 <c:redirect>標籤轉址到其它網址-範例
當<c:redirect>標籤轉址到其它網址時,也可以傳遞參數,就是使用<c:param>標籤新增這些參數,如下所示: <c:redirect url="Ch6_5_2.jsp"> <c:param name="type" value="2"/> </c:redirect> 上述url屬性指定轉址到HTTP通訊協定的URL網址,例如:

37 6-5-3 <c:import>標籤匯入URL-語法
<c:import>標籤是一個加強版本的<jsp:include>動作元素,可以在JSP程式的執行階段將其它網頁內容插入JSP程式,同樣也可以傳遞參數,其基本語法如下所示: <c:import url="URL" context="/Web應用程式" charEncoding="運算式" var="name“ scope-"scope"> <c:param name="name1“ value="value1"/> ………… </c:import>

38 6-5-3 <c:import>標籤匯入URL-範例
<c:import>標籤的url屬性支援FTP通訊協定,假設FTP站台的網址為ftp://ftp.company.com,在其根目錄有一個名為test.txt,此時在JSP網頁插入FTP檔案的標籤,如下所示: <c:import url="ftp://ftp.company.com/test.txt"/> 如果在目前Web應用程式的根目錄下有一個名為Ch6_5_3.txt的文字檔案,我們也可以使用<c:import>標籤來插入,如下所示: <c:import url="/Ch6_5_3.txt" charEncoding="MS950"/>

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

40 6-6 格式標籤庫的日期與數值格式 JSTL的格式標籤庫提供格式化日期或數值資料的相關標籤,可以將字串資料剖析轉換成日期或數值資料。在JSP程式請先使用taglib指引元素匯入格式標籤庫的URI,如下所示: taglib uri=" prefix="fmt" %>

41 6-6-1 日期格式標籤-<fmt:formatDate>標籤(語法)
<fmt:formatDate value="運算式“ timeZone="運算式" type="欄位" dateStyle="日期格式" timeStyle="時間樣式" pattern="格式範本" var="name" scope="scope"/> 上述<fmt:formatDate>標籤可以將value屬性的日期/時間資料,以指定的時區、樣式或範本來顯示,或是存入var屬性的範圍變數。

42 6-6-1 日期格式標籤-<fmt:formatDate>標籤(範例)
在JSP程式取得java.util.Date物件now後,就可以使用<fmt:formatDate>標籤格式化輸出的日期/時間資料,如下所示: <jsp:useBean id="now" class="java.util.Date"/> <fmt:formatDate type="time“ value="${now}"/> <fmt:formatDate type="date“ value="${now}" dateStyle="full"/>

43 6-6-1 日期格式標籤-<fmt:parseDate>標籤(語法)
<fmt:parseDate value="運算式“ timeZone="運算式" type="欄位" dateStyle="日期格式" timeStyle="時間樣式" pattern="格式範本" parseLocal="運算式" var="name" scope="scope"/>

44 6-6-1 日期格式標籤-<fmt:parseDate>標籤(範例)
JSP程式在指定日期/時間的字串變數current,就可以使用<fmt:parseDate>標籤剖析日期/時間資料,如下所示: <c:set var="current" value="11/01/2004"/> <fmt:parseDate var="pubDate“ value="${current}" pattern="MM/dd/yy"/> 上述標籤使用範本字串MM/dd/yy來剖析日期/時間資料,然後將值儲存到pubDate變數。

45 6-6-2 數值格式標籤-<fmt:formatNumber>標籤(語法)
<fmt:formatNumber value="運算式" type="種類" groupingUsed="運算式“ pattern="格式範本" currencyCode="運算式" currencySymbol="運算式" maxIntegerDigits="運算式" minIntegerDigits="運算式" maxFractionDigits="運算式" minFractionDigits="運算式" var="name" scope="scope"/>

46 6-6-2 數值格式標籤-<fmt:formatNumber>標籤(範例)
在JSP程式可以使用<fmt:formatNumber>標籤來格式化輸出數值資料,如下所示: <fmt:formatNumber value="${amount}" type="number"/>/ <fmt:formatNumber value="${total}" maxIntegerDigits="7" minIntegerDigits="3"/> 上述標籤以數值和最大整數位數7,最小為3的格式來顯示數值資料。

47 6-6-2 數值格式標籤-<fmt:parseNumber>標籤(語法)
<fmt:parseNumber value="運算式" type="種類" pattern="格式範本" parseLocale="運算式" integerOnly="運算式" var="name" scope="scope"/>

48 6-6-2 數值格式標籤-<fmt:parseNumber>標籤(範例)
JSP程式在指定數值變數order,就可以使用<fmt:parseNumber>標籤剖析數值資料,如下所示: <c:set var="order" value="15.5" /> <fmt:parseNumber value="${order}" integerOnly="true"/> 上述標籤只剖析出數值的整數部分。

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

50 6-7-1 時區設定標籤-<fmt:setTimeZone>標籤(語法)
<fmt:setTimeZone>標籤可以指定其它fmt格式標籤預設使用的時區,其基本語法如下所示: <fmt:setTimeZone value="運算式" var="name" scope="scope"/> 上述<fmt:setTimeZone>標籤指定value屬性使用的時區值。

51 6-7-1 時區設定標籤-<fmt:setTimeZone>標籤(範例)
在JSP程式可以使用<fmt:setTimeZone>標籤指定預設時區,例如:指定成EST時區,如下所示: <c:set var="zone" value="EST" scope="session"/> 上述標籤指定目前預設的時區為value屬性的EST,scope屬性將預設時區加入使用者的交談期(Session),換句話說,預設時區直到使用者交談期結束為止都有效。

52 6-7-1 時區設定標籤-<fmt:timeZone>標籤(語法)
<fmt:timeZone value="運算式"> Body </fmt:timeZone> 上述<fmt:timeZone>標籤可以指定value屬性使用的時區值,此時在Body中的子標籤就是使用此時區,但是只限於子標籤的範圍有效。

53 6-7-1 時區設定標籤-<fmt:timeZone>標籤(範例)
在JSP程式可以使用<fmt:timeZone>標籤指定部分標籤來使用不同的時區,例如:在預設EST時區之中,有部分格式標籤需要使用MST時區,如下所示: <fmt:timeZone value="MST"> <fmt:formatDate type="time“ value="${now}"/> <fmt:formatDate type="date“ value="${now}"/><br> </fmt:timeZone> 上述標籤指定其子標籤的時區為value屬性的MST。

54 6-7-2 語系的地區設定標籤-語法 在格式格式標籤庫提供<fmt:setLocale>標籤可以指定使用者所在語系的地區,其基本語法如下所示: <fmt:setLocale value="運算式" variant="name" scope="scope"/> 上述<fmt:setLocale>標籤指定value屬性使用的語系地區值。

55 6-7-2 語系的地區設定標籤-範例 在JSP程式可以使用<fmt:setLocale>標籤指定預設的語系地區,例如:指定成en英文的語系地區,如下所示: <fmt:setLocale value="en" scope="session"/> 上述標籤指定目前預設的語系地區為value屬性的en。

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

57 6-7-3 國際化訊息標籤-英文資源包 資源包(Resource Bundle)是用來儲存指定語系地區的訊息文字,這是一些位在「WEB-INF/classes」資料夾,副檔名為.properties的檔案,英文en的檔案名稱是Ch6_7_2_en.properties,其內容如下所示: hello=Hello! name=Joe Chen today=Today: {0,date} 在上述"="等號前為訊息的3個Key鍵,之後就是訊息內容的值,這就是<fmt:message>標籤以指定Key鍵來取出的訊息內容。

58 6-7-3 國際化訊息標籤-中文資源包 中文(台灣)zh_TW的檔案名稱為Ch6_7_2.zh_TW.properties,其內容如下所示:
hello=\u5927\u5bb6\u597d! name=\u9673\u6703\u5b89 today=\u4eca\u5929: {0, date} 上述檔案內容擁有相同的3個Key鍵,因為訊息是中文內容,所以需要編碼成Unicode,我們可以使用JDK的native2ascii.exe工具程式來進行編碼。

59 6-7-3 國際化訊息標籤-<fmt:message>與<fmt:param>標籤
<fmt:message>標籤可以顯示指定資源包(Resource Bundle)中的訊息文字,其基本語法如下所示: <fmt:message key="運算式" bundle="運算式" var="name" scope="scope"/> var="name" scope="scope"> <fmt:param value="運算式"/> …….. </fmt:message>

60 6-7-3 國際化訊息標籤-<fmt:setBundle>標籤
<fmt:setBundle>標籤可以指定預設資源包(Resource Bundle),其基本語法如下所示: <fmt:setBundle basename="運算式" var="name" scope="scope"/> 上述<fmt:setBundle>標籤指定位在basename屬性的資源包。

61 6-7-3 國際化訊息標籤-<fmt:bundle>標籤
<fmt:bundle>標籤可以指定其子標籤使用的資源包(Resource Bundle),其基本語法如下所示: <fmt:bundle basename="運算式" prefix="運算式"> Body </fmt:bundle> 上述<fmt:bundle>標籤可以指定basename屬性使用的資源包,此時在Body中的子標籤就是使用此資源包,但是只限於子標籤的範圍有效。


Download ppt "第6章 JSTL標籤建立JSP程式 6-1 JSTL標籤庫 6-2 核心標籤庫的一般用途標籤 6-3 核心標籤庫的條件標籤"

Similar presentations


Ads by Google