Struts 2でenumパラメータを使用するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/1624053

  •  06-07-2019
  •  | 
  •  

質問

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パラメーターを<=>に挿入します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top