1 / 61

第 6 章 JSTL標籤建立JSP程式

第 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 )依其不同用途,可以分為五種標籤庫,如下表所示:.

Download Presentation

第 6 章 JSTL標籤建立JSP程式

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

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="http://java.sun.com/jsp/jstl/core" 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"> 02-22222222 </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>標籤可以移除指定範圍的範圍變數,其基本語法如下所示: <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> Body </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:when> ……… <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:when> <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="email" value="hueyan@ms2.hinet.net"/> </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網址,例如:http://www.hinet.net,或是JSP程式的相對路徑,內含<c:param>標籤的URL參數type。

  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="http://java.sun.com/jsp/jstl/fmt“ prefix="fmt" %>

  41. 6-6-1 日期格式標籤-<fmt:formatDate>標籤(語法) • <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>標籤可以將字串剖析成日期/時間值,這是一種資料輸入標籤,可以將結果儲存在範圍變數,其基本語法如下所示: <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>標籤是用來格式化顯示的數值資料,其基本語法如下所示: <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>標籤可以將字串剖析成數值,其基本語法如下所示: <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屬性使用的時區值。

More Related