Struts 2でenumパラメータを使用するにはどうすればよいですか?
質問
Struts 2でActionを取得して、入力パラメーターとしてEnumを使用しようとしています。これまでに行ったことは次のようになります。
public TestAction {
public enum Module {
VALUE1;
}
private Module module;
public void setModule(Module module) {
this.module = module;
}
public Module getModule() {
return module;
}
}
しかし、これを使用しようとすると、xwork変換エラーが発生し、アクション自体も実行されません。これをそのまま動作させることはできますか、それともsetModule(String)を自分で提供する必要がありますか?
編集:Struts 2.1.6を使用しています 試しているURL:/test.action?module=value1
解決
文字列をすぐに列挙型にバインドする必要があります。 2.1.xと思うので、enum型コンバーターはデフォルト構成になっていると思います。
- 使用しているStruts 2のバージョンは?
次が2.0.14アプリのxwork-conversion.properties
にあるかどうかわからない場合
java.lang.Enum = com.opensymphony.xwork2.util.EnumTypeConverter
編集:コメントへの応答で、enumを割り当てる大文字小文字を無視する必要がある場合、次の選択肢があります。
- enumの値を実際には小文字に変更します-スタイルが良くなく、コードが少し変に見える可能性があります
- java.lang.Enumの大文字と小文字を区別しない新しいタイプコンバーターを作成します(xworkをコピーし、toUpperの入力を推測します)
- この特定の場合に新しいsetModule(String)を追加します
他のヒント
アクションからリダイレクトアクションに(アクションを転送するのではなく)転送するときに同様の問題が発生しますが、StrutsはパラメーターList<Enum>
を使用していることを正しく認識せず、プロキシメソッドを使用して変換する必要がありましたStringパラメーターを<=>に挿入します。
所属していません StackOverflow