Bean Validatorによるバリデーション (4/6)
作成:2017-10-28 10:24
更新:2017-10-28 10:24
更新:2017-10-28 10:24
■バリデーションの内容を調べる
単にチェックするだけでなく、発生した問題の内容などを調べたい場合には、それなりの処理を用意する必要があります。これには「ValidatorFactory」クラスと「Validator」クラスという2つのクラスを使います。基本的な流れを整理しましょう。
1. ValidatorFactoryインスタンスの用意
2. Validatorインスタンスの用意
3. Setインスタンスの取得
4. 繰り返しでSetを処理
下のリストは、先ほどのサンプルを修正したものです。フォームを送信し、問題があると、発生したエラーメッセージを表示します。ここでは、validateで得たSetから以下のようにしてエラーメッセージをテキストに取りまとめています。
「getMessage」は、エラーメッセージを返すConstraintViolationクラスのメソッドです。とりあえずこれだけでもわかっていれば、発生したエラーメッセージを処理できるようになるでしょう。
1. ValidatorFactoryインスタンスの用意
ValidatorFactory 変数 = Validation.buildDefaultValidatorFactory();ValidatorFactoryクラスは、バリデーションを扱うValidatorクラスを生成するファクトリークラスです。まず、「buildDefaultValidatorFactory」メソッドを使って、このValidatorFactoryのインスタンスを用意します。
2. Validatorインスタンスの用意
Validator 変数 = [ValidatorFactory] .getValidator();ValidatorFactoryから、「getValidator」メソッドでValidatorクラスのインスタンスを取得します。このValidatorが、バリデーションに関する各種の機能を提供してくれます。
3. Setインスタンスの取得
Set<ConstraintViolation<エンティティ>> 変数 = [Validator] .validate(entity);Validatorの「validate」メソッドを呼び出します。これが、バリデーションのチェックを行うものです。結果は、Setインスタンスで返されます。このSetには、ConstraintViolationというクラスのインスタンスがまとめられています。このConstraintViolationが、発生した例外に関する情報を管理するものです。
4. 繰り返しでSetを処理
for (ConstraintViolation<エンティティ> 変数 : [Set] ) {
……ConstraintViolationの処理……
}後は、Setから繰り返しなどで順に値を取り出し処理していくだけですね。では、実際の処理を見てみましょう。下のリストは、先ほどのサンプルを修正したものです。フォームを送信し、問題があると、発生したエラーメッセージを表示します。ここでは、validateで得たSetから以下のようにしてエラーメッセージをテキストに取りまとめています。
for (ConstraintViolation<MyDataEntity> err : errs) {
result += err.getMessage() + "<br>";
}「getMessage」は、エラーメッセージを返すConstraintViolationクラスのメソッドです。とりあえずこれだけでもわかっていれば、発生したエラーメッセージを処理できるようになるでしょう。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
@Override
protected void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
String name = request.getParameter("name");
String mail = request.getParameter("mail");
String tel = request.getParameter("tel");
EntityManager manager = factory.createEntityManager();
MyDataEntity entity = new MyDataEntity(name, mail, tel);
manager.getTransaction().begin();
try {
manager.persist(entity);
manager.getTransaction().commit();
} catch(ConstraintViolationException e){
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
Set<ConstraintViolation<MyDataEntity>> errs = validator.validate(entity);
String result = "";
for (ConstraintViolation<MyDataEntity> err : errs) {
result += err.getMessage() + "<br>";
}
List list = getAllEntity();
request.setAttribute("msg", "<b>Validation Error!</b><br>" + result);
request.setAttribute("list", list);
request.setAttribute("entity", entity);
RequestDispatcher dispatcher = request.getRequestDispatcher("index.jsp");
dispatcher.forward(request,response);
}
response.sendRedirect("/hello");
}
※関連コンテンツ
「初心者のためのJava Persistence API入門」に戻る