第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