0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Springのバリデーションで任意の順番(タイミング)で処理させる方法(@GroupSequence)

Posted at

備忘です。苦労したのと色々よくわからないので。

例えば以下のように一つの項目にいくつかのバリデーションが設定されていたとします。
image.png

このプログラムを起動させ、何も入力せずに、処理を行おうとするとバリデーションが働いて以下のような赤文字のエラーが表示されます。
image.png

この社員番号ですが、何も入力していない場合は、「社員番号を入力してください(@NoBlank)」だけ表示させたい(「数字を入力してください」と「10文字以内で入力してください」は表示させない)場合の記事です。

以下方法。
こんな感じでインターフェースのファイルを用意。
image.png

image.png
image.png

各フィールドのバリデーションにgroup属性をつける。
この場合Firstとつけている@NotBlankが最初に効くバリデーションになり、Secondとつけている@Pattern@Sizeが次に効くバリデーションとなる。
image.png

この2つのインターフェースをまとめるのが、GroupOrderインターフェース内の@GroupSequenceである。
image.png

以下結果。
何も値を入力しない。
image.png

何か値を入力する。
image.png
こんな感じでバリデーションを任意の順番(タイミング)で処理させることができる。

疑問点
社員番号に値を入れて、氏名は空欄する。
するとなぜか社員番号に「数字を入力してください」と「10文字以内で入力してください」が表示されない。
image.png

氏名に値を入れる。
そうすると社員番号に「数字を入力してください」と「10文字以内で入力してください」が表示される。
image.png
これは仕様らしく、「社員番号」、「氏名」両方に設定されているFirstのバリデーションを満たさないとSecondバリデーションは効かないらしい。

※どなたか、この仕様を別のやり方で解消する方法があれば教えてください。。。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?