0

最近、Spring を 3.0.5 から 3.1.2 にアップグレードしました。すべての選択ボックスが、以前に表示されていた toString 値の代わりに列挙値を表示しているフォームを除いて、すべてが機能しました。

私の列挙型は次のとおりです。

public enum StateType {

    ALABAMA("AL", 1, "Alabama"),
          etc

    StateType(String abbreviation, int code, String displayText) {
        this.abbreviation = abbreviation;
        this.code = code;
        this.displayText = displayText;
    }

          public String toString() {
             return displayText;
          }
}

私のコントローラーはこれを持っています:

    @ModelAttribute("stateList")
public static StateType[] populateStateList() {
    return StateType.values();
}

私のフォームにはこのスニペットがあります:

<form:select path="state" id="state" items="${stateList}" style="width:12em" dojoType="dijit.form.FilteringSelect"/>

これはすべて 3.0.5 で機能しました。何らかの理由で toString は 3.1.2 では呼び出されません。画面上の選択ボックスに enum Constant (ALABAMA) が表示されます。

何が変わったのかについてのアイデアはありますか?依存関係を追跡するためにmavenを使用しています。更新するために行ったのは、春のバージョンの定数を更新することだけでした。おそらく、他の依存関係を更新する必要がありますか?

ありがとう

4

1 に答える 1

0

次のソリューションを実装しました。私はより小さなプロジェクトを持っているので、これは問題ありませんでした。これは、大規模なプロジェクトでは受け入れられない場合があります。

私の列挙型のゲッターを追加しました:

public enum StateType { 

ALABAMA("AL", 1, "Alabama"), 
      etc 

StateType(String abbreviation, int code, String displayText) { 
    this.abbreviation = abbreviation; 
    this.code = code; 
    this.displayText = displayText; 
} 

public String getDisplayText() {
   return this.displayText;
}

      public String toString() { 
         return displayText; 
      } 

}

フォームにこれを追加します:

<form:select path="state" id="state" items="${stateList}" itemLabel="displayText" style="width:12em" dojoType="dijit.form.FilteringSelect"/>

これで期待どおりに動作するようになりました。前述したように、この回避策は大規模なプロジェクトでは受け入れられない場合があります。

于 2012-07-25T16:45:46.600 に答える