primefaces selectOneMenu无法正常工作

时间:2012-05-23 19:40:34

标签: 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但在查看/编辑模式下我无法获得所选值。

我做错了什么?

提前致谢!

1 个答案:

答案 0 :(得分:10)

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

@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();
}
根据{{​​1}} contract

hashCode()是强制性的。