第3.1式. 使用JSTL
問題
你需要在Struts應用中使用JSTL標簽苦的標簽。
動作要領
從http://jakarta.apache.org/taglibs下載Jakarta Taglibs JSTL 的參考實現。將jstl.jar和standard.jar文件拷貝到應用程序的WEB-INF/lib文件夾。然后將c.tld, fmt.tld, sql.tld, 和x.tld文件復制到WEB-INF/lib目錄。
在需要時用JSTL的地方使用適當的taglib指令:
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
Table 3-1列出了JSTL 標簽庫和對應的URI。
動作變化
JSTL 是一個強大的標簽庫集,完全應該作為Struts 開發者的工具箱之一。JSTL 包含有支持JavaBean 屬性、循環、條件邏輯、以及URL 格式化的標簽。也有格式化和解析日期和數值的標簽。XML 標簽庫可以用來在頁面中解析和處理XML。SQL 標簽庫則可以和關系數據庫交互。Functions 標簽庫提供了一些有功的函數,可用于表達始中,特別是字符串處理。
這其中最重要的就是Core 標簽庫。這個庫包含了很多可以取代Struts beanlogic標簽的標簽。那為什么要使用這個標簽而不是用Struts 標簽呢?答案是,這些標簽要比Struts 標簽要更強大而更易于使用。但是別搞錯,Struts 項目并不和它是抵觸的。恰恰相反,JSTL 允許Struts 集中于它最擅長的:為強壯的JSP Web應用提供控制器。
我們來看看如何分別使用JSTL 標簽和Struts 標簽來實現循環和顯示輸出。首先,下面是Struts 版本:
<ul>
<logic:iterate id="cust" name="branch" property="customers">
<li>
<bean:write name="cust" property="lastName"/>,
<bean:write name="cust" property="firstName"/>
</li>
</logic:iterate>
</ul>

使用JSTL,則變得簡單一些:
<ul>
<c:forEach var="cust" items="${branch.customers}">
<li>
<c:out value="${cust.lastName}, ${cust.firstName}"/>
</li>
</c:forEach>
</ul>

后者最酷的地方在于你并不是一定要一個個的進行選擇。JSTL 可以在你便干邊學中使用它。JSP 表達式語言(EL) 使得訪問各種范圍之中的ActionForms 和對象中的數據更加容易。最困難的決策不是你到底用不用JSTL,而是使用哪一個版本的JSTL。如果你使用JSP 2.0/Servlet 2.4 容器,比如Tomcat 5, 你最好使用JSTL 1.1。否則,目前你只能使用JSTL 1.0。
對于Struts應用來說,我們還是推薦使用JSTL 標簽。
相關動作
第3.2式會展示如何在Struts標簽中使用EL 表達式。
<JavaServer Pages> [Hans Bergsten 著(O'Reilly),機械工業出版中文版]就詳細涉及了JSTL,值得參考。
Sun 提供了一個JSTL 教程,地址是http://java.sun.com/tutorials/jstl.
下面地址也有一個快速參考:http://www.jadecove.com/jstl-quick-reference.pdf.
Manning 的 JSTL in Action也是一本很好的書:http://www.manning.com