在 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.jarjsf-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!)带有一个简单的 &lt;h:form&gt; 和一个带有 &lt;f:ajax&gt; 的按钮和一个简单的 @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的主要内容,如果未能解决你的问题,请参考以下文章

JSF(容器管理安全)组角色

JSF(容器管理安全)组角色

第六周博客

其他 servlet 可以访问 jsf 应用程序中的 cdi bean 吗?

什么决定了 JSF 版本?容器还是faces-config?

带有 JDBC 的 JSF 项目,我无法在 Servlet 上调用 DAO [重复]