简体   繁体   English

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

[英]Passing enum value as parameter to bean method from JSF pages fail after migrating to tomcat

I recently migrated my JSF app(using primefaces) from glassfish 3.1 to tomcat7 server. 我最近将我的JSF应用程序(使用primefaces)从glassfish 3.1迁移到tomcat7服务器。 Previously passing the enum value as string to managed bean methods through actionlistener attribute worked(without the need for a converter to convert string to enum) but now it fails with javax.el.MethodNotFoundException . 以前通过actionlistener属性将enum值作为字符串传递给托管bean方法(不需要转换器将字符串转换为枚举)但现在它失败了javax.el.MethodNotFoundException

JSF page: JSF页面:

 <h:form> <h:outputLabel value="Title"/><br/> <p:inputText value="#{lobController.current.title}"/> <p:commandButton action="#{lobController.create('CAR')}" value="Post"/> </h:form> 

Mangaged bean method 管理豆方法

 public void create(Type type) { ... } 

Log messages: 记录消息:

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


Edit 编辑

This starts working if I change the managed bean method as follow: 如果我更改托管bean方法,这将开始工作如下:

 public void create(String type) { Type type = Type.valueOf(type); ... } 

Using Primefaces 3.1 with JSF 2.1.6 on Tomcat 7.0.14 在Tomcat 7.0.14上使用Primefaces 3.1和JSF 2.1.6

It's a bug in Tomcat's EL implementation. 这是Tomcat的EL实现中的一个错误。 I've reported it for you: issue 52970 . 我已经为你报告过: 问题52970 Hopefully they aren't as picky on this as on my previous reports. 希望他们不像我以前的报告那样挑剔。

Until they get it fixed, your best bet is to drop a copy of Glassfish 3's EL 2.2 implementation JAR file in your webapp's /WEB-INF/lib and tell Mojarra to use it instead by the following entry in web.xml : 在他们修复之前,最好的办法是在您的webapp的/WEB-INF/lib删除Glassfish 3的EL 2.2实现JAR文件的副本,并告诉Mojarra使用它来代替web.xml的以下条目:

<context-param>     
    <param-name>com.sun.faces.expressionFactory</param-name>
    <param-value>com.sun.el.ExpressionFactoryImpl</param-value>   
</context-param>

Update : the ticket mentions that it's fixed and it will be in 7.0.27 and onwards. 更新 :票证提到它是固定的,它将在7.0.27及之后。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM