JSF2枚举类型的h:selectOneMenu

4

我正在尝试在JSF2项目中使用枚举和h:selectOneMenu框。

目前为止,我已经有:

枚举:

public enum MyType {
  TEST,
  ME;        
}

后端 Bean:

@ManagedBean
public class MyBean {
  private MyType type;
  public MyType[] getTypes {
    return MyType.values;
  }
  public void setType(MyType type) {
    this.type = type;
  }
  public MyType getType() {
    return this.type;
  }
}
<h:selectOneMenu id="mySelection" 
  value="#{myBean.type}">
  <f:selectItems value="#{myBean.types}" />
</h:selectOneMenu>

我的问题是值被正确显示但没有保存(实际上我在一个seam3 hibernate项目中使用它)。当我尝试使用自定义验证器时,我发现setType方法被调用了两次,第二次为null -> 导致什么都没有保存。我有遗漏什么吗?
到目前为止,我已经检查了以下主题: * jsf-2-0-use-enum-values-for-selectonemenu * jsf-2-0-use-enum-in-selectmany-menu * jsf-best-way-to-enum-internationalization-i18n 非常感谢您的帮助, Stephan
1个回答

3
在这种情况下,您根本不需要自定义转换器。JSF有一个内置的枚举转换器。仅当值为List<SomeEnum>而不是SomeEnum时,才需要自定义枚举转换器。请参见在h:selectManyCheckbox中使用枚举
除了两个方法中缺少括号导致的两个编译错误外,目前发布的代码看起来很好,应该可以正常工作。您的问题可能是由其他原因引起的,但由于简单起见,在问题中省略了这些原因。

感谢您的帮助。终于解决了我的问题 - 在xhtml页面中出现了混乱。 - Stephan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接