2

アプリケーションをサーブレットから Struts 2 に書き直しました。

以前は、パラメーター値を取得するために次のように書くことができました。

request.getParameter("name");

今私はすべきです:

public class MyAction implements ParameterAware {
  private Map<String, String[]> parameters;

  @Override
  public void setParameters(Map<String, String[]> parameters) {
    this.parameters = parameters;
  }

  public String getParameterValue(String name){
    return parameters.get(name)[0];
  }

  // get this parameter

サーブレットを使用すると、はるかに簡単になりました。

コードを DRYer にするために、ActionSupport を拡張するクラス CustomActionSupport を作成し、このコードをそこに配置します。しかし、なぜ Struts は私のためにそれをしないのでしょうか? どうすれば生活が楽になりますか?

ドキュメントが推奨される方法であると述べているので、私は ParameterAware を使用します。

4

1 に答える 1

5

Struts2の通常の使用例は、パラメーターに対応するアクションプロパティを持ち、アクションが実行される前にパラメーターインターセプターにこれらを設定させることです。

Struts2は、HTTPリクエストの結果としてアクションが呼び出されるという事実を隠そうとしています。パラメータを直接操作しようとすることは、そのパラダイムと戦うことです。


これは、パラメーターインターセプターに依存する小さな例です。まず、値オブジェクトを定義します。

public class Name {

  private String firstName;
  private String surname;

  public void setFirstName(String s) {
    this.firstName = s;
  }

  public void setSurname(String s) {
    this.surname = s;
  }

  /* Some interesting operations on Name... */

}

使用するStruts2アクションを定義しますNameexecute()nameのプロパティは、が呼び出される前にHTTPパラメータで設定されます。

public class NameAction extends Action {

  private final Name name = new Name();

  public Name getName() {
    return name;
  }

  public String execute() {
    /* Use "name" to do something interesting; its properties are set. */
  }

}

次に、アクションを使用するフォームを作成します。

<s:form action="name">
  <s:textfield name="name.firstName" label="First name" />
  <s:textfield name="name.surname" label="Last name" />
  <s:submit/>
</s:form>

Nameこれで、フォームがに送信されたときにパラメータがオブジェクトに設定されますNameAction

フレームワークを設定して、パラメーターの検証、IoCコンテナーを使用したアクションのオブジェクトの挿入など、さらに多くのことを実行できます。

于 2012-11-15T22:09:54.003 に答える