3

この奇妙な問題で何日も失っています。すべてを再確認しましたが、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() : "";
        }
    }

作成中は期待どおりに機能しますが (選択した値を渡します)、エンティティを編集しようとすると、選択したタイプが実際には選択されません。プライムフェイス 3.1.1 と 3.2 を試しましたが、表示/編集モードで選択した値を取得できません。

私は何を間違っていますか?

前もって感謝します!

4

1 に答える 1

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();
}

hashCode()equals() 契約により必須です。

于 2012-05-24T02:23:08.827 に答える