第3.2式. 使用Struts-EL 标签
问题
你希望在将JSTL 表达式用作Struts标签的属性值。
动作要领
使用Struts 分发保提供的EL标签库,位于contrib/struts-el/lib目录。你需要将所有JAR 和 TLD 文件拷贝到应用的WEB-INF/lib目录。在需要时用该标签的地方使用下面的taglib指令:
<%@ taglib uri="http://jakarta.apache.org/struts/tags-html-el" prefix="html-el" %>
表列出了Struts-EL 标签库和对应的taglib URI。
动作变化
JSTL风格的表达式,比如${foo.bar[4].baz},并不能够被基本的 Apache Struts Web Framework 标签支持。例如,如果你能够使用下面的方式来格式化一个标签就好了:
<html:text value="${sessionScope.foo.bar[3]}"/>
相反,这些标签需要运行时表达式,它们只是Java 代码(JS表达式):
<html:text value="<%=session.((Foo)getAttribute("foo")).getBar(3)%>"/>
将Java 代码从 JSP 页面中剔除会使得你的页面更少脆弱性和更容易维护。认识到了这种对EL 支持的缺乏后,因而创建了Apache Struts Web Framework-EL 标签库。这些库扩展了html, bean, and logic Apache Struts Web Framework 标签库,以添加对EL 表达式的支持。如果一个Struts 标签的属性支持一个运行时表达式,对应的Struts-EL 标签便会支持JSTL 表达式。可以在应用中混合使用常规的Struts 标签和Struts-EL 标签,即使在同一个页面中也可以。仅仅是需要保证在页面的taglib指令中为每一个标签库定义一个不同的前缀。
然而,Struts-EL 标签不是JSTL的替代。Struts-EL 标签仅提供仅仅针对Struts的标签。如果Struts 标签可以被一个JSTL 标签所替代,该标签就不会在Struts-EL 标签库中实现。
关于JSP 2.0
如果你使用支持JSP 2.0的容器,比如Tomcat 5,那么你便可以直接在基本Struts 标签中使用JSTL表达式。这就是说,不再需要使用Struts-EL 标签了。JSP 2.0 支持EL 表达式在页面中的直接使用。这些表达式可以用来渲染动态文本,就像原来常规HTML 标记和定制JSP标签中的动态属性值中的文本一样。表达式的值就像是你使用JSTL c:out标签输出的一样:
<p>Hello, ${user.firstName}<br /><html:text value="${sessionScope.foo.bar[3]}"/>
为了使用这个强大的特征,你必须是用两种方式之一来激活EL 。如果你使用Servlet 2.4 规范, EL 则默认是支持的。你可以通过你的应用的web.xml文件来区别是不是2.4版本的servlet规范。该文件的开头应该是这样:
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"version="2.4">
如果你使用Version 2.3 或者更早的规范,你将需要在JSP页面的开头使用下面的JSP 指令进行设置:
<%@page isELIgnored="false"%>
如果你使用2.4 DTD,那么你不需要设置这个指令;EL 语法将不会被忽略。如果你不确定,尽管可以设置它,这不会发生什么错误问题。 |
相关招式
第3.1式详细描述了如何配置JSTL的使用。