primefaces selectOneMenu无法正常工作

loo*_*brs 3 selectonemenu primefaces jsf-2

我在这个奇怪的问题上失去了几天,我仔细检查了一切,但我的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>
Run Code Online (Sandbox Code Playgroud)

我的转换器:

    @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() : "";
        }
    }
Run Code Online (Sandbox Code Playgroud)

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

我究竟做错了什么?

提前致谢!

Bal*_*usC 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();
}
Run Code Online (Sandbox Code Playgroud)

hashCode()根据equals() 合同,这是强制性的.