SAStruts/入力チェック/Form側で Annotation を使って設定する

SAStruts/入力チェック/Form側で Annotation を使って設定する

Annotation を使ってチェック内容を指定する

最初からいくつかチェックのやり方があるのでこれを Form クラスの property に Annotation で指定する。

必須チェックとかならformの該当プロパティにアノテーションで

@Required
public String hoge;

このようにマークする。

actionメソッド側で判定を有効にする

↑で設定したvalidatorを有効にする場合は対象のactionメソッドに対してアノテーションで色々指定する。

設定した検証を実際に行うには SAStruts/Action でのメソッドにつけるアノテーションに

@Execute(validator = true, input = "hoge.jsp")

このように記述するしておく必要がある。

inputに入力チェックで引っかかった場合の遷移を書く。

inputに設定する値は SAStruts/Action メソッドの戻り値とほぼ同等と思ってよい。 ↑の場合はjspを指定して呼び出している。

入力チェック Annotation 共通オプション

エラーメッセージのパラメータを直接指定する

プリセットのチェックはデフォルトで application.properties ファイルからエラーメッセージの雛形を取得し、そこにパラメータを埋め込むことになっている。

必須ならば、

errors.required={0}は必須です。

という感じ。

このように記述すると

@Required(arg0 = @Arg(key = "あいうえお", resource = false))
public String hoge;

エラーメッセージは、

あいうえおは必須です。

となる。

resource = false を記述することで key に書かれた値がそのままエラーメッセージに埋め込まれる。何も指定しなければデフォルトでresource = true

エラーメッセージに application.properties からの値を入れる

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 からメッセージを得ることもできる

指定のActionメソッドのみで判定する

特に「必須」のような判定は表示の時は必要ないが、更新の時は必要というようにメソッドによって使い分けたい時がある。

@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
java/sastruts/input_check/setting_in_form_by_annotation.txt · 最終更新: 2020-09-21 18:08 by ore