相关疑难解决方法(0)

如何在JSF中测试枚举相等?

是否有可能在JSF中测试枚举相等性?

例如当stuffenum Stuff:

<h:outputText value="text" rendered="#{mrBean.stuff == mrsBean.stuff}"/>
Run Code Online (Sandbox Code Playgroud)

jsf enums el

49
推荐指数
2
解决办法
4万
查看次数

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

我最近将我的JSF应用程序(使用primefaces)从glassfish 3.1迁移到tomcat7服务器.以前通过actionlistener 属性工作将enum值作为字符串传递给托管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>
Run Code Online (Sandbox Code Playgroud)

管理豆方法

public void create(Type type) {
  ...
}
Run Code Online (Sandbox Code Playgroud)

记录消息:

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)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);
     ...
}
Run Code Online (Sandbox Code Playgroud)

在Tomcat 7.0.14上使用Primefaces 3.1和JSF 2.1.6

java jsf tomcat converter el

5
推荐指数
1
解决办法
5121
查看次数

将Enum值作为参数从JSF传递(重新访问)

将Enum值作为参数从JSF传递

这个问题已经解决了这个问题,但是提出的解决方案并没有对我有用.我在我的支持bean中定义了以下枚举:

public enum QueryScope {
  SUBMITTED("Submitted by me"), ASSIGNED("Assigned to me"), ALL("All items");

  private final String description;

  public String getDescription() {
    return description;
  }

  QueryScope(String description) {
    this.description = description;
  }
}
Run Code Online (Sandbox Code Playgroud)

然后我用它作为方法参数

public void test(QueryScope scope) {
  // do something
}
Run Code Online (Sandbox Code Playgroud)

并在我的JSF页面中通过EL使用它

<h:commandButton
      id        = "commandButton_test"
      value     = "Testing enumerations"
      action    = "#{backingBean.test('SUBMITTED')}" />
Run Code Online (Sandbox Code Playgroud)

到目前为止一直很好 - 与原始问题中提出的问题相同.但是我必须处理一个javax.servlet.ServletException: Method not found: %fully_qualified_package_name%.BackingBean.test(java.lang.String).

所以似乎JSF正在解释方法调用,好像我想调用一个String作为参数类型的方法(当然不存在) - 因此不会发生隐式转换.

可能是什么因素导致这个例子的行为与前面提到的不同?

java jsf enums scope el

3
推荐指数
1
解决办法
6457
查看次数

标签 统计

el ×3

jsf ×3

enums ×2

java ×2

converter ×1

scope ×1

tomcat ×1