Websphere上EL表达式中的Enum参数

时间:2014-02-11 12:05:34

标签: jsf enums websphere el

在JSF / facelet页面中,我正在尝试使用枚举值作为参数调用方法,如下所示:

<f:viewAction action="#{myController.myMethod('MY_ENUM_VALUE')}" />

代码使用Tomcat正常工作,但在尝试使用Websphere时,这不再起作用了,我得到以下异常。

Caused by: javax.el.MethodNotFoundException: /myPage.xhtml @16,24 action="#{myController.myMethod('MY_ENUM_VALUE')}": Method not found: com.example.MyController@807f4c26.myMethod(java.lang.String)
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:109)

我想知道是否有一个简单的解决方案(在Websphere中配置?)或者我是否应该在我的WAR中集成不同的EL实现来覆盖Websphere。任何其他建议也是受欢迎的。

其他信息:

  • Websphere 8.5,使用Mojarra 2.2.5实现(使用PARENT_LAST模式覆盖Websphere的实现)
  • 使用Spring(在SpringBeanFacesELResolver中配置faces-config.xml
  • 我没有在EAR / WAR中打包任何特殊的EL实现。

1 个答案:

答案 0 :(得分:0)

Tomcat不提供JSF实现,因此您可以自由提供与Tomcat服务器提供的servler / JSP版本兼容的任何版本。

但是,WebSphere AS 8.5 is a full Java EE 6应用程序服务器将JSF集成到容器中。

将库捆绑到服务器中包含的WAR中不会自动覆盖服务器库。 Java默认为父级优先级加载模型。任意企业库中可用的某些配置信息可能对容器没有意义,并导致未定义的行为。此外,部署描述符可以指定不一定与容器兼容的WAR特定库的加载。

一些容器(其中的WebSphere)支持父类最后一次加载。这可能导致通常应该避免的奇怪行为。

据我所知,只有one documented way to support a com.sun.faces... JSF implementation,我怀疑只是暂时支持WAS 7二进制JSF应用程序WAR文件。


因此,您可能没有真正重写平台实现,而是通过在WAR文件中捆绑JSF库来触发一些未定义的行为。

我可能错过了你正在做的事情;如果是,请提供更多详细信息。