【发布时间】:2012-03-21 00:07:51
【问题描述】:
我最近将我的 JSF 应用程序(使用 primefaces)从 glassfish 3.1 迁移到了 tomcat7 服务器。以前通过actionlistener 属性将枚举值作为字符串传递给托管bean 方法有效(无需转换器将字符串转换为枚举),但现在它因javax.el.MethodNotFoundException 而失败。
JSF 页面:
<h:form> <h:outputLabel value="Title"/><br/> <p:inputText value="#{lobController.current.title}"/> <p:commandButton action="#{lobController.create('CAR')}" value="Post"/> </h:form>
托管bean方法
public void create(Type type) { ... }
日志消息:
javax.el.MethodNotFoundException: /_newLOB.xhtml @85,111 action="#{lobController.create('CAR')}":找不到方法: d432.xontrollers.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 方法,这将开始工作:
public void create(String type) { Type type = Type.valueOf(type); ... }
在 Tomcat 7.0.14 上使用 Primefaces 3.1 和 JSF 2.1.6
【问题讨论】:
标签: java jsf tomcat el converter