如何在Weblogic 10.3.x上利用EL 2.2功能?

时间:2012-01-16 17:59:22

标签: java jsf java-ee weblogic el

我安装了Weblogic 10.3.5。我在服务器上部署了一个带有JSF 2.0和JSTL 1.2的WAR。但我也需要EL 2.2功能。我需要什么JAR?如果有人可以从头开始指导我一步一步的指导,那就太好了,因为我一直想把它设置好几个小时而没有运气。

3 个答案:

答案 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。 我尝试了其他几种可用的实现,即

  • juel 2.2.1
  • tomcat-jasper-el 7.0.35

但没有运行。 使用2.2 glassfish实现(即使使用prefer-web-inf-classes或prefer-application-package)也不起作用,导致类加载问题。

我很欣赏任何实现最新的建议,并且无需更改服务器类路径即可使用weblogic。