【Spring MVC】フォームの入力チェック方法(同一の相関チェックを複数回使用する方法)

概要

Spring MVCにてフォームの入力チェックを行う方法についてまとめた。
前回作成した相関チェックについて、1つのフォーム内で複数回使用する方法について紹介する。

 

前提

前回の記事の続きとなる。

相関チェック作成方法

概要 Spring MVCにてフォームの入力チェックを行う方法についてまとめた。 今回は相関チェックルールを作成する方法について紹介する。   前提 入力チェックに必要な情報は以下となる。

【Spring MVC】フォームの入力チェック方法(相関チェックルールの追加)

 

相関チェックアノテーションを複数回使用する

相関チェックアノテーションを1つのフォーム内で複数回使用する方法について紹介する。

 

現状の問題点

Javaは基本的に同じアノテーションを1つのクラスに複数回使用できない
例えば以下のように、作成した相関チェックアノテーションを複数回クラスに使用した場合はエラーになってしまう。

FooForm.java


@FieldsMatch(property = "password", comparingProperty = "confirmPassword")
@FieldsMatch(property = "email", comparingProperty = "confirmEmail")
public class FooForm implements Serializable {

 

リピート可能アノテーション

相関チェックのアノテーションを複数回使用できるようにするため、リピート可能アノテーションを定義する。

FieldsMatchList.java


package com.example.prototype.web.common.validation;		
		
import static java.lang.annotation.ElementType.*;		
import static java.lang.annotation.RetentionPolicy.*;		
		
import java.lang.annotation.Documented;		
import java.lang.annotation.Retention;		
import java.lang.annotation.Target;		
		
@Documented		
@Retention(RUNTIME)		
@Target(TYPE)		
public @interface FieldsMatchContainer {		
	FieldsMatch[] value(); // ①	
}		

 

FieldsMatch[] value(); // ①

上記のように複数回使用したい相関チェックアノテーションクラスを定義するだけ。

 

リピート機能ON

もとの相関チェックアノテーションクラスを修正する。

FieldsMatch.java


(略)
@Documented
@Constraint(validatedBy = { FieldsMatchValidator.class })
@Retention(RUNTIME)
@Target({ TYPE, ANNOTATION_TYPE })
@Repeatable(FieldsMatchContainer.class) // ①
public @interface FieldsMatch {
(略)
}

 

@Repeatable(FieldsMatchList.class) // ①

上記により、@FieldsMatch アノテーションを同一のクラスに複数回使用することができるようになる。

 

使用例

パスワードの相関チェックに加えて、メールアドレスの相関チェックも同様に行う。
※メールアドレスの形式等は考慮しないこととする

 

フォーム

相関チェックアノテーションをクラスに追加する。

FooForm.java


@Data	
@FieldsMatch(property = "password", comparingProperty = "confirmPassword")	
@FieldsMatch(property = "email", comparingProperty = "confirmEmail")	
public class FooForm implements Serializable {	
	// フォーム部品を追加していく
	// パスワード
	@Alphanumeric
	private String password;
	// 確認用パスワード
	private String confirmPassword;
	// メールアドレス
	private String email;
	// メールアドレス(確認用)
	private String confirmEmail;
}	

 

メッセージプロパティ

メッセージプロパティファイルに、メールアドレスの表示内容を定義する。

messages_ja.properties


fooForm.password=パスワード
confirmPassword=パスワード(確認用)
fooForm.email=メールアドレス
confirmEmail=メールアドレス(確認用)
FieldsMatch.default.message={0}と{1}の値が一致しません。

 

画面

メールアドレスの入力項目、エラーメッセージ表示領域等を追加する。

input.jsp


<tr>				
	<th class="col-3">パスワード</th>			
	<td class="col-7">			
		<form:password path="password" cssClass="form-control" />		
		<form:errors path="password" cssClass="text-danger" />		
	</td>			
</tr>				
<tr>				
	<th class="col-3">パスワード(確認用)</th>			
	<td class="col-7">			
		<form:password path="confirmPassword" cssClass="form-control" />		
		<form:errors path="confirmPassword" cssClass="text-danger" />		
	</td>			
</tr>				
<tr>				
	<th class="col-3">メールアドレス</th>			
	<td class="col-7">			
		<form:input path="email" cssClass="form-control" />		
		<form:errors path="email" cssClass="text-danger" />		
	</td>			
</tr>				
<tr>				
	<th class="col-3">メールアドレス(確認用)</th>			
	<td class="col-7">			
		<form:input path="confirmEmail" cssClass="form-control" />		
		<form:errors path="confirmEmail" cssClass="text-danger" />		
	</td>			
</tr>				

 

実行結果

実行結果は以下となる。

 

【Spring MVC】フォームの入力チェック方法(相関チェックルールを複数回使用する方法)_1
▲1つのフォーム内で複数回、同じ相関チェックを使用できるようになった

 

スポンサーリンク