0
1

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 3 years have passed since last update.

リスト バリデーションチェック実装

Posted at

リストに対してバリデーションチェックをかける実装をしたので学習記録用に記載。
###リストの値に対してエラーチェックをかけていく

Service.java
public void ListErrorMessage(BindingResult bindingResult) {
    //リストのバリデーションはエラー時フィールド名が設定できないのでデフォルトメッセージにフィールド名を入れていく
    List<FeildError> error = bindingResult.getFieldErrors();
    Boolean hogeIniFlg = true;
    Boolean dateIniFlg = true;
    Boolean titleIniFlg = true;
    
    for(int =i; i<error.size(); i++){
       String field = error.get(i).getField();
       String objectName = error.get(i).getObjectName();

       if(field.contains("hoge") && hogeIniFlg){
          String defaultMessage = error.get(i).getDefaultMessage().replace("[0]","※ホゲ"
          FieldError fError = new FieldError(objectName,"outError["+i+"]",defaultMessage);
          bindingResult.addError((ObjectError) fError);//objectError型にキャスト
          hogeIniFlg = false;//二つ目以降はいらないためfalse
       }
       if(field.contains("date") && dateIniFlg){
          String defaultMessage = error.get(i).getDefaultMessage().replace("[0]","※日付"
          FieldError fError = new FieldError(objectName,"outError["+i+"]",defaultMessage);
          bindingResult.addError((ObjectError) fError);
          dateIniFlg = false;
       }
       if(field.contains("message") && messageIniFlg){
          String defaultMessage = error.get(i).getDefaultMessage().replace("[0]","※メッセージ"
          FieldError fError = new FieldError(objectName,"outError["+i+"]",defaultMessage);
          bindingResult.addError((ObjectError) fError);
          hogeIniFlg = false;
    }
}

<FieldErrorクラス>
コンストラクタの生成
FieldError(String objectName, String field, String defaultMessage)

パラメーター:
objectName - 影響を受けるオブジェクトの名前
field - オブジェクトの影響を受けるフィールド
defaultMessage - このメッセージを解決するために使用されるデフォルトのメッセージ

<Boolean型>
※boolean型とは、true(トゥルー) またfalse(フォールス)のどちらかのデータが必ず入ることが決まっているデータ型
※boolean型はデータ型のため、プログラムで使う前に事前に宣言する必要がある
(メソッド内で宣言したローカル変数で、初期化(※初期値を明示的に入れること)しないまま変数を利用するとエラーになる。)
「booleanとBooleanの違い」
・Booleanとは、boolean型ラッパークラスのことで、boolean型を便利に使うためのメソッドを持つ。

boolean型・・・ プリミティブ型 値を持つ
Booleanクラス・・・参照型 クラスまたはインスタンスを参照する(Booleanはクラスなのでnullも表現できる)

※contains()
boolean contains(Object o)
指定の要素がこのリストに含まれている場合にtrueを返します。つまり、このリストに、(o==null ? e==null : o.equals(e))となる要素eが1つ以上含まれている場合にのみtrueを返します。
定義:contains、インタフェース: Collection
パラメータ:o - このリスト内にあるかどうかが判定される要素
戻り値:指定された要素がこのリスト内にある場合はtrue

※get()
get(int index)
このリスト内の指定された位置にある要素を返します。
パラメータ:index - 返される要素のインデックス
戻り値:このリスト内の指定された位置にある要素

※size()
int size()
このリスト内にある要素の数を返します。
定義:size、インタフェース: Collection
戻り値:このリスト内の要素数

controller.java
//バリデーションチェック
//hasFieldErrors()で変数を指定したものだけ処理を通す
if(result.hasFieldErrors("hoge*")||result.hasFieldErrors("date*")||result.hasFieldErrors("message*"){
return "view/error"
}
form.java
@Valid
List<@Size( max=10 , message = "{メッセージプロパティから取得}") String> hoge;
@Valid
List<@Size( max=10 , message = "{メッセージプロパティから取得}") String> date;
@Valid
List<@Size( max=10 , message = "{メッセージプロパティから取得}") String> title;
html.java
<p th:if="${#fields.hasErrors('outError*')}" th:errors="*{outError*}"></p>

※serviceで"outError["+i+"]"にエラーメッセージを入れているためoutError*

0
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?