我安装了Weblogic 10.3.5。我在服务器上部署了一个带有JSF 2.0和JSTL 1.2的WAR。但我也需要EL 2.2功能。我需要什么JAR?如果有人可以从头开始指导我一步一步的指导,那就太好了,因为我一直想把它设置好几个小时而没有运气。
答案 0 :(得分:7)
最简单的是删除jboss-el.jar,这是一个与EL 2.1兼容的实现,在/WEB-INF/lib
中提供与EL 2.2相同的features,并告诉JSF实现使用该EL实现。如何做到这一点取决于所使用的JSF实现。对于Mojarra,您需要将以下上下文参数添加到web.xml
:
<context-param>
<param-name>com.sun.faces.expressionFactory</param-name>
<param-value>org.jboss.el.ExpressionFactoryImpl</param-value>
</context-param>
在MyFaces的情况下,它有以下上下文参数:
<context-param>
<param-name>org.apache.myfaces.EXPRESSION_FACTORY</param-name>
<param-value>org.jboss.el.ExpressionFactoryImpl</param-value>
</context-param>
答案 1 :(得分:2)
我觉得接受的答案可能适用于所有情况,也可能不适用于所有情况,当然,问题在于,如果没有任何支持在未来的补丁版本中继续修复错误,您将被困在单个JBoss版本的EL中。适当的2.2实施。
最终,这是在WebLogic 10.3.6服务器上对我有用的。
我从Glassfish下载了EL 2.2 API和实现jar,并将其包含在我的Web应用程序的WEB-INF/lib
文件夹中。
EL-API-2.2.jar
EL-IMPL-2.2.0-SNAPSHOT.jar
执行此操作后,您通常需要向web.xml
添加一个上下文参数,以表示要为新的EL实现加载的类,如BalusC的答案。 Weblogic似乎并不关心这一点,但它的类加载器有自己的方式。您需要在weblogic.xml
中指定为WEB-INF/lib
中的EL类提供优先类加载。这将允许加载Glassfish实现来代替与WebLogic捆绑的旧EL实现。
<container-descriptor>
<prefer-application-packages>
<package-name>com.sun.el.*</package-name>
<package-name>javax.el.*</package-name>
</prefer-application-packages>
</container-descriptor>
答案 2 :(得分:0)
我恢复了这个问题,因为我发现el 2.2的jboss实现在重新部署时有一个permgenspace memory leak。 我尝试了其他几种可用的实现,即
但没有运行。 使用2.2 glassfish实现(即使使用prefer-web-inf-classes或prefer-application-package)也不起作用,导致类加载问题。
我很欣赏任何实现最新的建议,并且无需更改服务器类路径即可使用weblogic。