jstl簡化jsp編碼

 

jstl入門

初步瞭解jstl的最好方法是訪問apache網站--jakarta.apache.org,並下載jstl的參考實現。在apache站點還可找到詳細的安裝指南。可下載的參考實現是一個jar文件、文檔和簡單代碼示例的組合包。

要在你的j2ee web應用程序中使用jstl,只需簡單地將"lib"目錄下的jstl jar文件複製到你應用程序的web-inf/lib目錄下。要在一個特定的jsp中使用jstl標記,你還必須提供一個taglib指令。例如,要將"核心"jstl庫導入到你的頁面中,你應該在你的jsp頂端包含下面的指令,如下所示:

 

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

 

jstl的el支持

jstl的一個重要優勢是它採用了簡單的expression language(el),該語言提供一個訪問和操作應用程序數據(如存儲在servlet上下文中的數據)的簡單方式。

el的語法很簡單,而且比java中具有相同功能的表示要對用戶更爲友好。例如, pagecontext.getattribute("aname")表達式在el中就成了${aname}。所有的jstl標記在其屬性值中都使用el表達式。el表達式在訪問嵌套屬性時使用${java.expression}或${ data.reference}格式。數據參考可以是對象及其屬性或者對象及其屬性數組:

 

${myobject.property}

 

數組存取操作符也用於以索引元素集合顯示的數據,如java數組或java.util.list:

 

${mylist[2]}$

 

在el表達式中除了可以使用屬性和數組元素操作符以及算術、關係和邏輯操作符以外,你還可以使用特別操作符來測試對象是否爲空。

除了對象和數組存取,el還提供了一個完整的常用操作符集合,包括=、!、<、>、<=、>=、+、-、*、/等。

在任何jsp範圍(頁面、請求、會話或應用程序)中的對象都可以在el表達式中引用。例如,如果你有一個帶有一個屬性"ename"的java bean--employee,那麼可以用el表達式${employee.ename}訪問這個變量。

除了顯式變量,el還提供了對隱式變量的請求和應答對象中的隱式變量的直接訪問。例如,以下語句將訪問一個名爲"empname"的請求參數:

 

${param.empname}

 

即將推出的jsp 2.0和jstl 1.0都使用el。然而,jsp 2.0中使用的el稍有一點不同。jstl專家組(jsr-052)已經同意在即將推出的jstl維護版中使用el的jsp 2.0版本。

使用jstl核心標記庫

jstl核心標記庫爲諸如顯示、迭代和設置變量等操作提供了最常用的標記。下面,我們更詳細地介紹一些最常用的jstl核心標記庫。首先,在使用任何jstl核心標記之前,你需要將以下指令添加到你的jsp中:

 

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

 

你最常使用的jstl操作之一是顯示動態值。爲了顯示動態數據,核心庫提供了c:out標記。c:out標記在一個頁面中顯示一個el表達式的值。例如:

 

first name: <c:out value="${employee.ename}" />

 

c:out的值屬性還可以包含文本和表達式的組合:

 

<c:out value="first name: ${employee.ename}" />

 

(注意:當jsp 2.0提供對el的支持時,你無需再使用c:out操作,你可以直接在頁面中嵌入jsp表達式。)

另一個操作是設置變量。爲了在一個頁面中設置變量,核心標記庫提供了c:set標記。這個例子顯示了將變量ename設置爲參數"enameparm"的值:

 

<c:set var="ename" value="${param.
enameparm}" />

 

jstl核心標記庫還提供了用於處理條件的標記。c:if處理簡單的條件測試。計算test屬性中布爾表達式的值;如果是真,計算主體中的內容。在下面的操作中,你還可以看到存儲測試結果以備以後在頁面(或者在別的地方,如果指定了其他的可選範圍屬性)中使用的可選的var屬性:

 

<c:if test="${employee.salary <= 10000}" >
it's time for a raise <c:out value="${employee.name">! </c:if>

 

下面,你可以看到jstl通過c:choose、c:when和c:otherwise對跳轉邏輯的支持。你可以在一個選擇(choose)標記中包含一組c:when操作;如果對c:when塊中的表達式求值爲真,則不對下面的c:choose操作中的測試進行計算。如果對c:when塊中測試求值沒有一個爲真,則計算c:otherwise操作(如果存在的話)的內容:

 

<c:choose>
<c:when test="${dept.name == 
'development'}">
...
</c:when>
<c:when test="${dept.name == 
'marketing'}">
...
</c:when>
<c:otherwise>
...
</c:otherwise>
</c:choose>

 

c:foreach標記提供了一個對元素集合進行迭代的簡單方法。如果你只想迭代集合中的部分元素,你可以分別指定開始和結束索引以及帶有可選的開始、結束與步進屬性的增量值。在下例中,我們對變量empnames中的一個集合的內容進行迭代;在每個循環中,下一個元素被放置在變量名中,並在c:foreach操作的主體中進行求值。

 

 
<table>
<c:foreach var="name" items="${empnames}">
<tr><td><c:out value="${name}"/></td></tr>
</c:foreach>
</table>

 

jstl核心標記庫還可以簡化異常處理。以前,你必須將java try/catch語句放置在java scriptlet中,或者在錯誤頁面中提供它們。jstl通過c:catch標記提供了一個處理異常的高明方法,而無需使用scriptlet。

 

<c:catch>
   <!—. . . some set of nested jstl tags that fire an exception->

</c:catch>

 

可以在jakarta.apache.org的參考實現中提供的jstl文檔中找到其他jstl標記庫如xml、國際化和數據庫標記庫的例子。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章