在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。任何其他建议也是受欢迎的。
其他信息:
SpringBeanFacesELResolver
中配置faces-config.xml
)答案 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库来触发一些未定义的行为。
我可能错过了你正在做的事情;如果是,请提供更多详细信息。