検証エラー時に、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; }