menu
書いてる野郎
orebike@gmail.com
最初からいくつかチェックのやり方があるのでこれを Form クラスの property に Annotation で指定する。
必須チェックとかならformの該当プロパティにアノテーションで
@Required public String hoge;
このようにマークする。
↑で設定したvalidatorを有効にする場合は対象のactionメソッドに対してアノテーションで色々指定する。
設定した検証を実際に行うには SAStruts/Action でのメソッドにつけるアノテーションに
@Execute(validator = true, input = "hoge.jsp")
このように記述するしておく必要がある。
inputに入力チェックで引っかかった場合の遷移を書く。
inputに設定する値は SAStruts/Action メソッドの戻り値とほぼ同等と思ってよい。 ↑の場合はjspを指定して呼び出している。
プリセットのチェックはデフォルトで application.properties
ファイルからエラーメッセージの雛形を取得し、そこにパラメータを埋め込むことになっている。
必須ならば、
errors.required={0}は必須です。
という感じ。
このように記述すると
@Required(arg0 = @Arg(key = "あいうえお", resource = false)) public String hoge;
エラーメッセージは、
あいうえおは必須です。
となる。
resource = false
を記述することで key
に書かれた値がそのままエラーメッセージに埋め込まれる。何も指定しなければデフォルトでresource = true
application.properties
へ、
nihongo.a=あいうえお
このように記述しておく
@Required(arg0 = @Arg(key = "nihongo.a", resource = true)) public String hoge;
エラーメッセージは、
あいうえおは必須です。
となる。
resource = true
を記述することで key
に書かれた値をkeyとして application.properties を検索しその値がエラーメッセージに埋め込まれる。
テンプレートも使わずに完全に任意のエラーメッセージを出すには
@Required(msg = @Msg(key = "あいうえおは絶対必要!!", resource = false)) public String hoge;
msg
パラメータにこのように値を渡すと指定したエラーメッセージをズバリ出すことができる。
エラーメッセージは、
あいうえおは絶対必要!!
となる。
argの場合と同様に resource = true
にすることで application.properties からメッセージを得ることもできる
特に「必須」のような判定は表示の時は必要ないが、更新の時は必要というようにメソッドによって使い分けたい時がある。
@Required(target = "index") public String hoge;
その時のこのように target
にメソッド名を指定することでチェックをするメソッドを限定することができる。
複数のメソッドを指定したい場合は
@Required(target = "hoge,piyo,fuga") public String hoge;
とコンマ区切りで書く。
Property を List<String>
にして受け取るものがあるが、これはプリセットの annotation ではチェックできない。
つまり @LongType
をつけても List の中身の String をチェックしてくれない。
@Required public String password;
null や 空文字を判定する。
これが存在するということは、この必須チェック以外のプリセットのチェックは条件に合致しなくても、つまり値が無しだったとしてもチェックを素通りするということである。
@Maxlength(maxlength = 123, arg0 = @Arg(key="ぱすわ〜ど", resource = false), arg1 = @Arg(key = "123", resource = false)) public String password;
頭からケツまで完全に一致する正規表現を指定したほうがよいだろう。
@Mask(mask = "^[0-9]*$", arg0 = @Arg(key = "hoge番号", resource = false)) public String hogeNumber;
こいつは内部実装がバグっていてメールアドレスをちゃんと判定してくれないので使わないほうがよい。
@EmailType(arg0 = @Arg(key = "メアド", resource = false)) public String mailAddress;
@LongRange(min = 0, max = 366) public String hogeDays;
指定したフォーマットに沿って入力されているかつ、それがDateに変換できるかをチェックする
@DateType(datePatternStrict = "yyyy-MM-dd") public String hoge