JSF 2.0のカスタムバリデーター
この記事では、JSF 2.0でカスタムバリデーターを作成する方法を示します
ステップ
-
javax.faces.validator.Validatorインターフェースを実装してバリデータークラスを作成します。 -
validate()メソッドをオーバーライドします。 -
@FacesValidatorアノテーションを介して一意のバリデータIDを割り当てます。 -
f:validatorタグを介してカスタムバリデータークラスをJSFコンポーネントに参照します。
カスタムバリデーター名「EmailValidator」を作成するための詳細ガイド– Java正規表現を介して電子メールアドレスを検証します。
1. フォルダー構造
このプロジェクトのディレクトリ構造。

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

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