menu
書いてる野郎
orebike@gmail.com
URLからの呼び出し対象にするExecuteアノテーションはオプションが沢山あるのでメモ。
validatorオプションをtrueにするとFormでアノテーションで設定した条件で値のチェックを行う。
@Execute(validator = true, ... )
詳細はSAStruts/入力チェックを参照
validateオプションにActionクラス、もしくは使用しているFormクラス上のチェック用メソッド名を指定する。
@Execute(validate = "hogeValidate", ...)
チェック用のメソッドは
public ActionMessages hogeValidate(){ ActionMessages errors = new ActionMessages(); if(!"123".equals(hogeForm.id)){ errors.add("invalidId", new ActionMessage("errors.invalidId")); } return errors; }
のような実装にする必要がある。
validator,validate指定時のチェックに引っかかった場合の遷移をinputオプションに指定する。 これはActionメソッドのreturnの内容とほぼ同じ物が使える。
@Execute(input = "piyo.jsp", ...)
@Execute(input = "piyo?redirect=true", ...)
Formのプロパティだけは「{id}」のようにパラメータとして再利用できる。
@Execute(input = "piyo/{id}", ...)
プロパティの中身がマルチバイト文字とかだとなんだか値が取れないようだ
通常はForm側が先行して行われ、ここで引っかかると独自の入力チェックメソッドを指定していても、 引っかかった時点で処理が中断されてしまう。
@Execute(stopOnValidationError = false, ...)
のように書くとFormチェック後、独自の入力チェックメソッドが実行される。
しかしこの場合はFormによる基本的な前提条件(必須等)が使えないのでこの部分も独自で判定する必要がある。
エラー情報は通常requestスコープに保存されるが、これをsessionスコープ等に変更できる。
@Execute(saveErrors = SaveType.SESSION, ...)
PRGパターンを用いた制御で必要になる
Formの値の復元のためにFormインスタンス自体をsessionで管理できる。
チェックに引っかからなければ値の復元の必要はないし、次回の入力で邪魔になる。なので正常終了(JSPの描画が完了まで)した場合のみ formインスタンスを削除する設定が書ける
@Execute(removeActionForm = true, ...)
PRGパターンを用いた制御で必要になる