libro
www.tuyano.com
初心者のためのJava Persistence API入門

Bean Validatorによるバリデーション (4/6)

作成:2017-10-28 10:24
更新:2017-10-28 10:24

■バリデーションの内容を調べる

単にチェックするだけでなく、発生した問題の内容などを調べたい場合には、それなりの処理を用意する必要があります。これには「ValidatorFactory」クラスと「Validator」クラスという2つのクラスを使います。基本的な流れを整理しましょう。

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クラスのメソッドです。とりあえずこれだけでもわかっていれば、発生したエラーメッセージを処理できるようになるでしょう。

※プログラムリストが表示されない場合

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入門」に戻る