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] ) {後は、Setから繰り返しなどで順に値を取り出し処理していくだけですね。では、実際の処理を見てみましょう。
……ConstraintViolationの処理……
}
下のリストは、先ほどのサンプルを修正したものです。フォームを送信し、問題があると、発生したエラーメッセージを表示します。ここでは、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入門」に戻る