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

标签 java jsf tomcat el converter

我最近将我的 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')}": 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.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)


编辑

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

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

在 Tomcat 7.0.14 上使用 Primefaces 3.1 和 JSF 2.1.6

最佳答案

这是 Tomcat 的 EL 实现中的一个错误。我已经为您报告了:issue 52970 .希望他们不会像我之前的报告那样挑剔。

在他们修复它之前,最好的办法是删除 Glassfish 3's EL 2.2 implementation JAR file 的副本在您的网络应用程序的 /WEB-INF/lib 中,并通过 web.xml 中的以下条目告诉 Mojarra 使用它:

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

更新:工单上提到它已修复,将在 7.0.27 及以后版本中发布。

关于java - 迁移到 tomcat 后,将枚举值作为参数从 JSF 页面传递给 bean 方法失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9534130/

相关文章:

java - 使用 BCEL 时出现错误 "java.lang.VerifyError: StackMapTable error: bad offset"

java - Maven - maven-remote-resources-plugin 不包括所有资源目录

java - Spring Boot : use several locale message. 日志记录属性取决于 'args' 值

jsf - 在EJB中进行验证时,如何在jsf中显示多条错误消息?

javascript - 如何将 JSF 托管 bean 属性传递给 JavaScript 函数?

java - Tomcat session 复制——不同机器配置

java - tomcat 的 server.xml 中的两个连接器

java - 如何使用 Rhino 和 Eclipse 从 JavaScript 访问外部 JAR 文件?

java - 在java中使用正则表达式分隔自定义标签的内容

css - 在 PrimeFaces 选项卡组件中更改背景颜色时出现问题