610 likes | 812 Views
第 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 )依其不同用途,可以分為五種標籤庫,如下表所示:.
E N D
第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)依其不同用途,可以分為五種標籤庫,如下表所示:
6-1-1 JSTL 1.1版標籤庫-說明1 核心標籤庫(Core) • 核心標籤庫包含EL範圍變數的建立和刪除標籤、錯誤處理和一般程式語言流程控制的條件和迴圈標籤。 • URL處理標籤可以使用在交談期追蹤(Session Tracking),和執行階段插入指定URL網址的網頁或轉址到其它URL網址。 格式標籤庫(I18N Formattiong) • 格式標籤庫提供資料格式和剖析的相關標籤,支援國際化格式I18N,以便符合不同地區的資料格式差異,包含國際化編碼、訊息、數值和日期格式等相關標籤。
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-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"開頭,在":"後是標籤名稱和屬性清單。
6-2 核心標籤庫的一般用途標籤 • 6-2-1 <c:out>標籤輸出資料 • 6-2-2 <c:set>標籤建立變數 • 6-2-3 <c:remove>標籤移除變數
6-2-1 <c:out>標籤輸出資料-語法 • <c:out>標籤可以將value屬性值的文字值或EL運算式進行運算,將運算結果的null或String字串文字值送到瀏覽程式顯示,其功能類似JSP的Expression元素。其基本語法如下所示: <c:out value="運算式" escapeXml="boolean“ default="運算式"/>
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>標籤之中的字串內容。
6-2-2 <c:set>標籤建立變數-語法 • JSTL的<c:set>標籤提供標籤語法來建立和指定範圍變數值,其基本語法如下所示: <c:set var="name" value="運算式" scope="scope" target="beans_object“ property="property_name"/>
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範圍變數。
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屬性是值。
6-2-3 <c:remove>標籤移除變數-說明 • <c:remove>標籤可以移除指定範圍的範圍變數,其基本語法如下所示: <c:remove var="name" scope="scope"/>
6-2-3 <c:remove>標籤移除變數-範例 • <c:remove>標籤如果沒有指定scope屬性,就是刪除Page範圍的變數,如下所示: <c:remove var="var2"/> • 上述標籤刪除Page範圍名為var2的變數。因為不同範圍可能擁有同名的變數,所以,刪除指定範圍的變數請使用scope屬性。例如:刪除Request範圍的var1變數,如下所示: <c:remove var="var1" scope="request"/>
6-3 核心標籤庫的條件標籤 • 6-3-1 <c:if>標籤的是否選條件 • 6-3-2 <c:choose>標籤的多選一條件 • 6-3-3 巢狀的條件標籤
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部分;不成立,就不執行。
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。
6-3-2 <c:choose>標籤的多選一條件-語法 • <c:choose>標籤類似Java的switch條件敘述,可以建立多選一條件,其基本語法如下所示: <c:choose> <c:when test="運算式"> Body </c:when> ………… <c:otherwise> Body </c:otherwise> </c:choose>
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>
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>
6-4 核心標籤庫的迴圈標籤 • 6-4-1 <c:forEach>標籤 • 6-4-2 <c:forTokens>標籤 • 6-4-3 迴圈標籤的varStatus屬性
6-4-1 <c:forEach>標籤-語法 • <c:forEach>迴圈標籤可以取出陣列或集合物件的所有元素,也可以如同Java的for迴圈敘述成為一個計數迴圈,其基本語法如下所示: <c:forEach var="name" items="運算式" begin="運算式" end="運算式" step="運算式"> Body </c:forEach>
6-4-1 <c:forEach>標籤-語法說明 • <c:forEach>標籤如果指定items屬性的陣列或集合物件元素,這種操作稱為「迭代」(Iteration),即每執行一次迴圈取出一個元素儲存在var屬性的範圍變數,然後執行Body內容。 • 當標籤指定begin、end和step屬性,就可以限制迴圈只取出從begin的開始元素,到end的結束元素,以step的增量執行迭代(Iteration)。 • 若沒有指定items屬性,begin、end和step屬性就是一種計數迴圈。
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變數可以取出每一次迴圈的集合物件元素,然後顯示元素的鍵和值。
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個陣列元素。
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>
6-4-2 <c:forTokens>標籤-語法 • <c:forTokens>標籤可以將範圍變數的字串使用分隔字元(Delimiter)來進行分割,我們可以將它視為是一種在字串中執行的迭代(Iteration),其基本語法如下所示: <c:forTokens var="name" items="運算式“ delims="運算式" begin="運算式" end="運算式" step="運算式"> Body </c:forTokens>
6-4-2 <c:forTokens>標籤-語法說明 • <c:forTokens>標籤的items屬性是一個擁有delims屬性分隔字元的字串,每執行一次迴圈取出一個以分隔字元分割出的元素,然後將它儲存在var屬性的範圍變數,然後執行Body內容。 • 在標籤如果同時指定begin、end和step屬性,將限制取出begin的開始元素,到end的結束元素,以step的增量執行迭代(Iteration)。
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>
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>
6-4-3 迴圈標籤的varStatus屬性-屬性說明 • index、count、first和last屬性的狀態說明,如下表所示:
6-5 核心標籤庫的URL處理標籤 • 6-5-1 <c:url>標籤建立URL網址 • 6-5-2 <c:redirect>標籤轉址到其它網址 • 6-5-3 <c:import>標籤匯入URL
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>
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網址存入此範圍變數。
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>
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。
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>
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"/>
6-6 格式標籤庫的日期與數值格式 • 6-6-1 日期格式標籤 • 6-6-2 數值格式標籤
6-6 格式標籤庫的日期與數值格式 • JSTL的格式標籤庫提供格式化日期或數值資料的相關標籤,可以將字串資料剖析轉換成日期或數值資料。在JSP程式請先使用taglib指引元素匯入格式標籤庫的URI,如下所示: <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt“ prefix="fmt" %>
6-6-1 日期格式標籤-<fmt:formatDate>標籤(語法) • <fmt:formatDate>標籤是用來格式化日期/時間資料,以指定格式來顯示日期/時間資料,屬於一種資料輸出標籤,其基本語法如下所示: <fmt:formatDate value="運算式“ timeZone="運算式" type="欄位" dateStyle="日期格式" timeStyle="時間樣式" pattern="格式範本" var="name" scope="scope"/> • 上述<fmt:formatDate>標籤可以將value屬性的日期/時間資料,以指定的時區、樣式或範本來顯示,或是存入var屬性的範圍變數。
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"/>
6-6-1 日期格式標籤-<fmt:parseDate>標籤(語法) • <fmt:parseDate>標籤可以將字串剖析成日期/時間值,這是一種資料輸入標籤,可以將結果儲存在範圍變數,其基本語法如下所示: <fmt:parseDate value="運算式“ timeZone="運算式" type="欄位" dateStyle="日期格式" timeStyle="時間樣式" pattern="格式範本" parseLocal="運算式" var="name" scope="scope"/>
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變數。
6-6-2 數值格式標籤-<fmt:formatNumber>標籤(語法) • <fmt:formatNumber>標籤是用來格式化顯示的數值資料,其基本語法如下所示: <fmt:formatNumber value="運算式" type="種類" groupingUsed="運算式“ pattern="格式範本" currencyCode="運算式" currencySymbol="運算式" maxIntegerDigits="運算式" minIntegerDigits="運算式" maxFractionDigits="運算式" minFractionDigits="運算式" var="name" scope="scope"/>
6-6-2 數值格式標籤-<fmt:formatNumber>標籤(範例) • 在JSP程式可以使用<fmt:formatNumber>標籤來格式化輸出數值資料,如下所示: <fmt:formatNumber value="${amount}" type="number"/>/ <fmt:formatNumber value="${total}" maxIntegerDigits="7" minIntegerDigits="3"/> • 上述標籤以數值和最大整數位數7,最小為3的格式來顯示數值資料。
6-6-2 數值格式標籤-<fmt:parseNumber>標籤(語法) • <fmt:parseNumber>標籤可以將字串剖析成數值,其基本語法如下所示: <fmt:parseNumber value="運算式" type="種類" pattern="格式範本" parseLocale="運算式" integerOnly="運算式" var="name" scope="scope"/>
6-6-2 數值格式標籤-<fmt:parseNumber>標籤(範例) • JSP程式在指定數值變數order,就可以使用<fmt:parseNumber>標籤剖析數值資料,如下所示: <c:set var="order" value="15.5" /> <fmt:parseNumber value="${order}" integerOnly="true"/> • 上述標籤只剖析出數值的整數部分。
6-7 格式標籤庫的國際化設定 • 6-7-1 時區設定標籤 • 6-7-2 語系的地區設定標籤 • 6-7-3 國際化訊息標籤
6-7-1 時區設定標籤-<fmt:setTimeZone>標籤(語法) • <fmt:setTimeZone>標籤可以指定其它fmt格式標籤預設使用的時區,其基本語法如下所示: <fmt:setTimeZone value="運算式" var="name" scope="scope"/> • 上述<fmt:setTimeZone>標籤指定value屬性使用的時區值。