JSF 2.0のカスタムバリデーター

JSF 2.0のカスタムバリデーター

この記事では、JSF 2.0でカスタムバリデーターを作成する方法を示します

ステップ

  1. javax.faces.validator.Validatorインターフェースを実装してバリデータークラスを作成します。

  2. validate()メソッドをオーバーライドします。

  3. @FacesValidatorアノテーションを介して一意のバリデータIDを割り当てます。

  4. f:validatorタグを介してカスタムバリデータークラスをJSFコンポーネントに参照します。

カスタムバリデーター名「EmailValidator」を作成するための詳細ガイド– Java正規表現を介して電子メールアドレスを検証します。

1. フォルダー構造

このプロジェクトのディレクトリ構造。

jsf2-custom-validator-folder

2. 検証クラス

カスタムバリデータークラスを作成し、javax.faces.validator.Validatorインターフェイスを実装します。

package com.example;

import javax.faces.validator.Validator;
public class EmailValidator implements Validator{
    //...
}

validate()メソッドをオーバーライドします。

public class EmailValidator implements Validator{

    public void validate(FacesContext context, UIComponent component,
            Object value) throws ValidatorException {
        //...
    }
}

@FacesValidatorで一意のバリデータIDを割り当てます。

package com.example;

import javax.faces.validator.Validator;

@FacesValidator("com.example.EmailValidator")
public class EmailValidator implements Validator{
    //...
}

完全なカスタム検証クラスを参照してください。

EmailValidator.java

package com.example;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.validator.FacesValidator;
import javax.faces.validator.Validator;
import javax.faces.validator.ValidatorException;

@FacesValidator("com.example.EmailValidator")
public class EmailValidator implements Validator{

    private static final String EMAIL_PATTERN = "^[_A-Za-z0-9-]+(\\." +
            "[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*" +
            "(\\.[A-Za-z]{2,})$";

    private Pattern pattern;
    private Matcher matcher;

    public EmailValidator(){
          pattern = Pattern.compile(EMAIL_PATTERN);
    }

    @Override
    public void validate(FacesContext context, UIComponent component,
            Object value) throws ValidatorException {

        matcher = pattern.matcher(value.toString());
        if(!matcher.matches()){

            FacesMessage msg =
                new FacesMessage("E-mail validation failed.",
                        "Invalid E-mail format.");
            msg.setSeverity(FacesMessage.SEVERITY_ERROR);
            throw new ValidatorException(msg);

        }

    }
}

上記は、IDがcom.example.EmailValidatorのカスタムバリデータークラスです。 電子メールが無効な場合、FacesMessageエラーメッセージを返します。

Note
電子メールの正規表現パターンの詳細については、この「http://www.example.com/regular-expressions/how-to-validate-email-address-with」を参照してください。 -regular-expression / [Java正規表現で電子メールを検証する]」の記事。

3. マネージドBean

「user」という名前の通常のマネージドBean。ここでは特別なものはありません。

package com.example;

import java.io.Serializable;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

@ManagedBean(name="user")
@SessionScoped
public class UserBean implements Serializable{

    String email;

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

}

4. JSFページ

f:validatorタグの「validatorId」属性を介したJSFコンポーネントへの上記のカスタムバリデーターの参照。

DIをJSFカスタムバリデーター
にスプリングするJSFカスタムバリデーターに@Autowiredが必要な場合は、validatorIdの代わりにbindingを使用します。 この投稿を読む–Spring @Autowired into JSF custom validator

default.xhtml



    

    

Custom validator in JSF 2.0

Enter your email :

result.xhtml



    

        

Custom validator in JSF 2.0

Email Address :

5. Demo

カスタムバリデーターを介して電子メールアドレスを検証します。電子メールアドレスが無効な場合、エラーメッセージを返します。

jsf2-custom-validator-example

ソースコードをダウンロード

ダウンロード–JSF-2-Custom-Validator-Example(10KB)