JSF2 枚举 h:selectOneMenu

发布于 2024-10-29 10:00:35 字数 1258 浏览 1 评论 0原文

我正在尝试在 JSF2 项目中使用带有 ah:selectOneMenu 框的枚举。

到目前为止我所得到的:

Enum:

public enum MyType {
  TEST,
  ME;        
}

Backing 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 page:

<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

非常感谢您的帮助,
斯蒂芬

I'm trying to use an enum with a h:selectOneMenu box in a JSF2 project.

What I've got so far:

Enum:

public enum MyType {
  TEST,
  ME;        
}

Backing 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 page:

<h:selectOneMenu id="mySelection" 
  value="#{myBean.type}">
  <f:selectItems value="#{myBean.types}" />
</h:selectOneMenu>

My problem is that the values are correctly displayed but they are not saved (I'm actually using it in a seam3 hibernate project). When I tried it with a custom validator, I saw that the setType method is called twice, the second time with null -> resulting that nothing is saved.
Am I missing anything?

So far I've checked the following topics:
* jsf-2-0-use-enum-values-for-selectonemenu
* jsf-2-0-use-enum-in-selectmany-menu
* jsf-best-way-to-enum-internationalization-i18n

Thanks a lot for your help,
Stephan

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

此刻的回忆 2024-11-05 10:00:35

在这种特殊情况下,您根本不需要自定义转换器。 JSF 有一个内置的枚举转换器。仅当您使用 List 而不是 SomeEnum 作为值时,才必须使用自定义枚举转换器。另请参阅在 h:selectManyCheckbox 中使用枚举

除了由于两个方法中缺少括号而导致的两个编译错误之外,到目前为止发布的代码看起来不错并且应该可以正常工作。您的问题可能是由其他问题引起的,为了简单起见,您在问题中省略了其他内容。

You should in this particular case not have the need for a custom converter at all. JSF has a builtin enum converter. A custom converter for enums is only mandatory when you have a List<SomeEnum> instead of SomeEnum as value. See also Use enum in h:selectManyCheckbox.

Apart from two compilation errors due to missing parentheses in two methods, the code posted as far looks fine and should work fine. Your problem is likely caused by something else which you omitted from the question for simplicity.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文