SAStruts/Action/Executeアノテーション

SAStruts/Action/Executeアノテーション

URLからの呼び出し対象にするExecuteアノテーションはオプションが沢山あるのでメモ。

Formでの値のチェックをする

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とメソッド、必ず両方で入力チェックする

通常はForm側が先行して行われ、ここで引っかかると独自の入力チェックメソッドを指定していても、 引っかかった時点で処理が中断されてしまう。

@Execute(stopOnValidationError = false, ...)

のように書くとFormチェック後、独自の入力チェックメソッドが実行される。

しかしこの場合はFormによる基本的な前提条件(必須等)が使えないのでこの部分も独自で判定する必要がある。

エラー情報の保存先を変更する

エラー情報は通常requestスコープに保存されるが、これをsessionスコープ等に変更できる。

@Execute(saveErrors = SaveType.SESSION, ...)

PRGパターンを用いた制御で必要になる

正常終了時(validatorに引っかからなかった)場合にsessionからformを削除する

Formの値の復元のためにFormインスタンス自体をsessionで管理できる。

チェックに引っかからなければ値の復元の必要はないし、次回の入力で邪魔になる。なので正常終了(JSPの描画が完了まで)した場合のみ formインスタンスを削除する設定が書ける

@Execute(removeActionForm = true, ...)

PRGパターンを用いた制御で必要になる

タグ

java/sastruts/action/execute_annotation.txt · 最終更新: 2017-09-26 18:34 by ore