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

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

最简单的方法是删除jboss-el.jar ,这是一个与EL 2.1兼容的实现,提供与/WEB-INF/lib EL 2.2相同的function ,并告诉JSF实现使用该EL实现。 如何做到这一点取决于所使用的JSF实现。 对于Mojarra,您需要将以下上下文参数添加到web.xml

  com.sun.faces.expressionFactory org.jboss.el.ExpressionFactoryImpl  

在MyFaces的情况下,它是以下上下文参数:

  org.apache.myfaces.EXPRESSION_FACTORY org.jboss.el.ExpressionFactoryImpl  

也可以看看:

  • 在EL中调用带参数/变量/参数的直接方法或方法

我觉得接受的答案可能适用于所有情况,也可能不适用于所有情况,当然,问题在于你将不得不坚持使用单个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添加一个context参数,以表示要为新的EL实现加载的类,如BalusC的答案。 Weblogic似乎并不关心这一点,它的类加载器有自己的方式。 您需要在weblogic.xml指定为WEB-INF/lib的EL类提供优先类加载。 这将允许加载Glassfish实现来代替与WebLogic捆绑的旧EL实现。

    com.sun.el.* javax.el.*   

我得到了复活的问题,因为我发现el 2.2的jboss实现在重新部署时会产生permgenspace 内存泄漏 。 我尝试了其他几种可用的实现,即

  • juel 2.2.1
  • tomcat-jasper-el 7.0.35

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

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