我正在尝试在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;
}
}
xhtml页面:
<h:selectOneMenu id="mySelection"
value="#{myBean.type}">
<f:selectItems value="#{myBean.types}" />
</h:selectOneMenu>
我的问题是值正确显示但是没有保存(我实际上是在seam3 hibernate项目中使用它)。当我尝试使用自定义验证器时,我看到setType方法被调用两次,第二次调用null - &gt;导致没有任何东西被保存。 我错过了什么吗?
到目前为止,我已经检查了以下主题:
* jsf-2-0-use-enum-values-for-selectonemenu
* jsf-2-0-use-enum-in-selectmany-menu
* jsf-best-way-to-enum-internationalization-i18n
非常感谢你的帮助,
斯蒂芬
答案 0 :(得分:3)
在这种特殊情况下,您根本不需要自定义转换器。 JSF有一个内置的枚举转换器。只有当List<SomeEnum>
代替SomeEnum
作为值时,才能使用自定义枚举转换器。另请参阅Use enum in h:selectManyCheckbox。
除了两个方法中由于缺少括号而导致的两个编译错误之外,到目前为止发布的代码看起来很好并且应该可以正常工作。您的问题很可能是由于您为了简单起见而从问题中省略了其他内容。