【问题标题】:primefaces selectOneMenu doesn't working when it should [duplicate]primefaces selectOneMenu在应该[重复]时不起作用
【发布时间】:2012-05-30 09:37:39
【问题描述】:

我被这个奇怪的问题浪费了好几天,我仔细检查了所有内容,但我的 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,但在查看/编辑模式下无法获得所选值。

我做错了什么?

提前致谢!

【问题讨论】:

  • entity 和 entityType 只是幻想名称
  • 使用 p:ajax 代替 valueChangeListener...
  • 没有 valueChangeListener 的同样问题。我的问题是加载编辑页面时选择的值。我认为 value="#{entityBean.entity.type}" 和转换器应该这样做,但显然这对我不起作用。

标签: jsf-2 primefaces selectonemenu


【解决方案1】:

如果您的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 是强制性的。

【讨论】:

  • 谢谢你的回答,我的equals方法是missig!现在它工作正常!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-29
  • 1970-01-01
  • 1970-01-01
  • 2018-08-14
  • 2011-09-29
  • 1970-01-01
  • 2014-05-04
相关资源
最近更新 更多