Java 迁移到tomcat后,将枚举值作为参数从JSF页面传递给bean方法失败

Java 迁移到tomcat后,将枚举值作为参数从JSF页面传递给bean方法失败,java,jsf,tomcat,el,converter,Java,Jsf,Tomcat,El,Converter,我最近将我的JSF应用程序(使用primefaces)从GlassFish3.1迁移到tomcat7服务器。以前通过actionlistener属性将枚举值作为字符串传递给托管bean方法是有效的(不需要转换器将字符串转换为枚举),但现在由于javax.el.MethodNotFoundException而失败 JSF页面: 日志消息: javax.el.MethodNotFoundException:/_newLOB.xhtml@85111 action=“#{lobController.cr

我最近将我的JSF应用程序(使用primefaces)从GlassFish3.1迁移到tomcat7服务器。以前通过
actionlistener
属性将枚举值作为字符串传递给托管bean方法是有效的(不需要转换器将字符串转换为枚举),但现在由于
javax.el.MethodNotFoundException
而失败

JSF页面:

日志消息:

javax.el.MethodNotFoundException:/_newLOB.xhtml@85111 action=“#{lobController.create('CAR')}”:未找到方法: d432.1特朗尔斯。LOBController@15b2cec.create(java.lang.String)位于 com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:110) 在javax.faces.component.UICommand.broadcast(UICommand.java:315)中 javax.faces.component.UIData.broadcast(UIData.java:1093)位于 javax.faces.component.UIData.broadcast(UIData.java:1093)位于 javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794) 在 javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259) 在 com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81) 位于com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) 位于javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 在 org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:79) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)


编辑 如果我按如下所示更改托管bean方法,这将开始工作:



在Tomcat 7.0.14上使用Primefaces 3.1和JSF 2.1.6这是Tomcat EL实现中的一个缺陷。我已经为您报告了:。希望他们不会像我以前的报告那样挑剔

在他们修复之前,最好的办法是在您的WEB应用程序的
/WEB-INF/lib
中删除一份,并通过
WEB.xml
中的以下条目告诉Mojarra使用它:


com.sun.faces.expressionFactory
com.sun.el.ExpressionFactoryImpl

更新:罚单中提到它已修复,将在7.0.27及以后更新

<h:form>
   <h:outputLabel value="Title"/><br/>
   <p:inputText value="#{lobController.current.title}"/>

   <p:commandButton action="#{lobController.create('CAR')}" value="Post"/>
</h:form>
public void create(Type type) {
  ...
}
public void create(String type) {
     Type type = Type.valueOf(type);
     ...
}