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



从JSF 传递Enum值作为参数

这个问题已经处理了这个问题,但是所提出的解决方案对我来说并不奏效

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;
  }
}

然后我用它作为方法参数

public void test(QueryScope scope) {
  // do something
}

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

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

到目前为止还不错——与最初问题中提出的问题相同。然而,我必须处理一个javax.servlet.ServletException: Method not found: %fully_qualified_package_name%.BackingBean.test(java.lang.String)

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

是什么因素使本例中的行为与上述行为不同?

backingBean中,您可能已经编写了一个带有enum参数的方法:

<!-- This won't work, EL doesn't support Enum: -->
<h:commandButton ... action="#{backingBean.test(QueryScope.SUBMITTED)}" />
// backingBean:
public void test(QueryScope queryScope) {
    // your impl
}

但是,proposed solution不使用枚举,而是使用String。这是因为EL根本不支持enum:

<!-- This will work, EL does support String: -->
<h:commandButton ... action="#{backingBean.test('SUBMITTED')}" />    
// backingBean:
public void test(String queryScopeString) {
    QueryScope queryScope = QueryScope.valueOf(queryScopeString);
    // your impl
}

相关内容

  • 没有找到相关文章

最新更新