リストに対してバリデーションチェックをかける実装をしたので学習記録用に記載。
###リストの値に対してエラーチェックをかけていく
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
戻り値:このリスト内の要素数
//バリデーションチェック
//hasFieldErrors()で変数を指定したものだけ処理を通す
if(result.hasFieldErrors("hoge*")||result.hasFieldErrors("date*")||result.hasFieldErrors("message*"){
return "view/error"
}
@Valid
List<@Size( max=10 , message = "{メッセージプロパティから取得}") String> hoge;
@Valid
List<@Size( max=10 , message = "{メッセージプロパティから取得}") String> date;
@Valid
List<@Size( max=10 , message = "{メッセージプロパティから取得}") String> title;
<p th:if="${#fields.hasErrors('outError*')}" th:errors="*{outError*}"></p>
※serviceで"outError["+i+"]"にエラーメッセージを入れているためoutError*