jsf-2 - primefaces selectOneMenu 在应该时不起作用

标签 jsf-2 primefaces selectonemenu

我被这个奇怪的问题浪费了好几天,我仔细检查了所有内容,但我的 selectOneMenu 根本不起作用,我不明白为什么。

这是我的代码:

我的 jsf

<p:selectOneMenu id="entityType"  
      value="#{entityBean.entity.type}" 
      style="width:240px;" 
      converter="entityTypeConverter"
      valueChangeListener="#{entityBean.entityTypeListener}"
      required="true">
      <f:selectItems value="#{entityBean.typeList}"
              var="et"
              itemLabel="#{et.name}"
              itemValue="#{et}" />
</p:selectOneMenu>

我的转换器:

    @FacesConverter("entityTypeConverter")
    public class EntityTypeConverter implements Converter {
        public Object getAsObject(FacesContext context, UIComponent component, String value) {
            if (value == null || value.length() == 0) {
                return null;
            }
            Long id = Long.parseLong(value);

            return EntityType.findEntityType(id);
        }

        public String getAsString(FacesContext context, UIComponent component, Object value) {

            return value instanceof EntityType ? ((EntityType) value).getId().toString() : "";
        }
    }

它在我创建时按预期工作(它传递了选定的值),但是当我尝试编辑实体时,实际上从未选择过选定的类型。我尝试使用 primefaces 3.1.1 和 3.2,但在查看/编辑模式下无法获得所选值。

我做错了什么?

提前致谢!

最佳答案

如果您的 EntityType 类的 equals() 方法丢失或损坏,就会发生这种情况。鉴于您的 EntityType 类中有一个 id 属性,该属性似乎足以唯一地标识实例,因此以下最小实现应该为您完成:

@Override
public boolean equals(Object other) {
    return (other instanceof EntityType) && (id != null)
        ? id.equals(((EntityType) other).id)
        : (other == this);
}

@Override
public int hashCode() {
    return (id != null)
        ? (this.getClass().hashCode() + id.hashCode())
        : super.hashCode();
}

hashCode() 根据 equals() contract 是强制性的.

关于jsf-2 - primefaces selectOneMenu 在应该时不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10726716/

相关文章:

css - IE8 和 Primefaces p :selectOneMenu misbehave when having a lots of p:selectOneMenu in a form

ajax - 如果设置了其他 SelectOneMenu 的值,则更新 SelectOneMenu(未触发事件)

jsf - 如何确保JSF taglib子组件的id不同?

primefaces - 获取 p :dataTable column names in bean

jsf - JSF 中的浏览器刷新处理

java - dataTable仅打印第一项,如果value属性包含方括号

jsf - inputMask 失去焦点自动补全

jsf - 'null Converter' 的转换错误设置值 - 为什么我在 JSF 中需要转换器?

javascript - 在 primefaces 中使用颜色选择器的 JQuery 自然接口(interface)

Spring MVC 与 Spring WebFlow