検証エラー時に、input先に遷移する前にリクエストに情報を設定する方法。

Seasarメーリングリストで、質問されてました。
Seasar-user:16966)

ひがさんより@Executeのinput属性にメソッドを指定してという返信があって、メソッド指定ができること知らなかったのでメモ。

どういうことか

例えば、アンケート入力画面が有って、アンケートの項目はActionクラスで動的に生成してRequestスコープに設定して画面表示している場合。検証エラー時(アノテーションでの)にアンケートの項目をどのように設定するのかということ。

今まで

@Executeアノテーションのvalidate属性に"@"と表示用のオブジェクトを作るメソッドを作って設定してました。

QuestionAction.java
public class QuestionAction {

  @ActionForm
  @Resource
  protected QuestionForm questionForm;

  public List<QuestionView> questionViewList;

  @Execute(validator = false)
  public String index() {

    // 表示処理(questionViewListの生成)

    return "index.jsp";
  }

  @Execute(validator = true, validate="validate, @", input = "index.jsp")
  public String regist() {

    // 登録処理

    return "regist.jsp";

  }

  public ActionMessages validate() {

    // 表示処理(questionViewListの生成)

    return new ActionMessages();
  }
 


}
QuestionForm.java
public class QuestionForm {

  @Required
  public String[] questions;

}

こうすればよかった

@Executeアノテーションのinput属性に表示用のオブジェクトを生成するメソッドを追加する。

QuestionAction.java
public class QuestionAction {

  @ActionForm
  @Resource
  protected QuestionForm questionForm;

  public List<QuestionView> questionViewList;

  @Execute(validator = false)
  public String index() {

    // 表示処理(questionViewListの生成)

    return "index.jsp";
  }

  @Execute(validator = true, input = "backToIndex")
  public String regist() {

    // 登録処理

    return "regist.jsp";

  }

  @Execute(validator = false)
  public String backToIndex() {

     // 表示処理(questionViewListの生成)
     
     return "index.jsp";

  }

}
QuestionForm.java
public class QuestionForm {

  @Required
  public String[] questions;

}

まとめ

Strutsの場合もinput属性にActionを指定できるのかなと思って、会社にあったStruts インアクションを見てみたら、指定することができますって書いてあった。

こういうのはStrutsしっかり勉強した人は直感的にわかるんだろうなと思いました。