在 Servlet 2.4 容器上运行 JSF 2.0
Posted
技术标签:
【中文标题】在 Servlet 2.4 容器上运行 JSF 2.0【英文标题】:Running JSF 2.0 on Servlet 2.4 container 【发布时间】:2011-08-25 07:14:48 【问题描述】:据我所知,JSF 2 需要 servlet 2.5,所以它不能在 JBOSS 4.05 (Tomcat 5.5) 上运行。不幸的是,我必须在那个环境中部署一个使用 JSF 2.0 和 Primefaces 的应用程序。
有什么技巧可以使用它吗?
【问题讨论】:
【参考方案1】:JSF 2.0 很大程度上依赖于 EL 2.1,它是 Servlet 2.5 的一部分,与 EL 2.0 相比,它是 Servlet 2.4 的一部分,这是一个重大变化,但它不依赖于任何特定的 Servlet 2.5 特定 API。 Servlet 2.4 应该也能正常工作。所以理论上,如果您在/WEB-INF/lib
中提供您自己的 EL 2.1 API 和实现,您可以让 JSF 2.0 在 Servlet 2.4 上运行。我在 Tomcat 5.5.33 上使用/WEB-INF/lib
中的以下库进行了快速测试:
el-api.jar
文件从Tomcat 6.0.x 的lib
文件夹复制
jboss-el.jar
文件(实现 EL 2.1 并支持 EL 2.2 类似带参数的方法调用)
jsf-api.jar
和 jsf-impl.jar
来自 Mojarra 2.0.x
还有一个声明了 JBoss EL 的 Servlet 2.4 web.xml
:
<context-param>
<param-name>com.sun.faces.expressionFactory</param-name>
<param-value>org.jboss.el.ExpressionFactoryImpl</param-value>
</context-param>
一个简单的 JSF 2.0 Facelet(不是 JSP!)带有一个简单的 <h:form>
和一个带有 <f:ajax>
的按钮和一个简单的 @ViewScoped
@ManagedBean
在 Tomcat 5.5.33 上为我工作。在您的 JBoss 4.0.5 上试一试并彻底测试。
请注意,您至少需要 JDK 1.5,而不是 JDK 1.4。另请注意,由于存在 Servlet 2.5 特定的 el-api.jar
文件,因此您的应用程序无法移植到任何 Servlet 3.0 容器。
【讨论】:
好人,谢谢!但我仍然有一个问题——Primefaces 没有采用这种方法。错误: 原因:org.xml.sax.SAXException:错误处理 [jar:file:/HIDDEN/jboss-4.0.5.GA/server/default/./tmp/deploy/tmp1314317090148712617primefaces-test-exp.war/ WEB-INF/lib/primefaces-3.0.M2-SNAPSHOT.jar!/META-INF/primefaces-p.taglib.xml@5,17] 试用 PrimeFaces 2.x。 3.0 具有 Servlet 3.0 特定的依赖项。以上是关于在 Servlet 2.4 容器上运行 JSF 2.0的主要内容,如果未能解决你的问题,请参考以下文章
其他 servlet 可以访问 jsf 应用程序中的 cdi bean 吗?