js|過程|網頁 JSTL標記庫
至此,我已經解釋了一些基本原理並且涵蓋了EL文法。我要專門討論四種JSTL標記庫。我主要討論核心庫,因為它是你一定要使用的;但是,我也會詳細的討論其餘幾個,以便你能啟動它。
首先,儘管我應該更多地談論JSTL標記庫的兩種風格,我上面提到的每個JSTL標記庫以兩個版本出現:一個支援褂肊L的運算式;另一個支援標準JSP運算式。當你引入任何標記庫到一個JSP頁時,你要定義一個首碼,該首碼指定了與庫中標記相對應的命名空間。
四種標準標記庫,和他們的JSTL規範定義的首碼常規,列表如下。記住:你可以定義自己的首碼,但是這絕對沒有什麼好處。
四種標準標記庫
為了使用頁中的核心標記庫( 實際上,你使你的頁對標記庫的命名空間可見),在你的頁首包含下列例子中的指令:
<%@ taglib prefix="c" uri=http://java.sun.com/jstl/core %>
為了使用該標記庫的標記,用你在你的包含語句中設計好的首碼,在你的頁中給每個標記加上首碼:
<c:out value="${anExpression}"/>
核心資料庫
讓我們更詳細的測試核心資料庫,先看看他最通用的功能。
顯示/設定值和異常處理
核心庫的最基本的標記是c:out標記,它在頁中顯示一個EL運算式的值。一個使用c:out的運算式通常是這樣:
We have <c:out value="${applicationScope.product.inventoryCount}" escapeXml="true" default="0" /> of those items in stock.
上例中,value屬性是我們送到頁輸出的運算式。我也說明了選項escapeXml的屬性和預設屬性。escapeXml的屬性指定了XML字元(<、>、 &、 和 .)是否應該轉化為相應的字元實體代碼(這樣他們可以讓這些字元出現在一個HTML頁中);預設屬性用於EL不能估算出數值或者數值計算出來為空白的情況。
注意:當EL支援完全貫穿整個JSP2.0的時候,你不需要使用c:out動作;你可以僅嵌套JSP運算式直接在頁中。
另一個普遍使用的核心動作是c:set,它在頁中設定一個變數。你可以用兩種方法使用c:set動作,第一種方法設定在var屬性中定義的變數到在value屬性中定義的值上,方法如下:
<c:set var="customerID" value="$param:customerNumber" scope="session" />
上述的選擇項scope屬性指定了我們要在會話期範圍內設定變數customerID;如果範圍沒有制定,範圍預設為頁。
c:set另一個強大的用途就是將c:set標記的體的內容賦給一個指定的變數:
<c:set var="cellContents"><td><c:out value="${myCell}"/></td></c:set>
在上例中,c:set動作定義了名為cellContents(在頁的範圍內)的變數,該變數擁有在標記的體中定義的內容。在這種情況下,體定義了一個HTML表格儲存格元素,計算體中的c:out動作,並且該計算的結果包括在體中的字串直接量值。
就像你預想的那樣,JSTL進行異常處理有點早。在典型的JSP頁中,你有兩種異常處理的方法:試圖/捕捉直接嵌入到頁中的小指令碼代碼中的塊;或者用一個JSP errorPage指令。JSP errorPage指令提供一個良好的捕捉所有異常的方法來處理頁中任何可能的異常。JSTL用一個c:catch動作提供一個好的可選擇的方式。這個c:catch動作提供一個更細粒度的有效方法來處理異常。而且沒有嵌入Java代碼到頁中。一個c:catch動作是這樣的:
<c:catch> <!--. . . some set of nested JSTL tags below which would be hit on an exception--></c:catch>
c:catch動作有一個可選的屬性,即一個指向拋出異常的變數。
你可能不怎麼願意使用c:remove標記。這個標記有用於變數名和範圍的屬性,並且可從指定的範圍內刪除指定的變數。