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

javax.faces.validator.Validatorインタフェース

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

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

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

タグ。

カスタムバリデータ名 “EmailValidator”を作成するための詳細ガイド – Java正規表現による電子メールアドレスの検証。

1.フォルダ構造

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


jsf2-custom-validator-folder、title = "jsf2-custom-validator-folder"、width = 302、height = 363

2.バリデータクラス

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

package com.mkyong;

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.mkyong;

import javax.faces.validator.Validator;

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

完全なカスタムバリデータクラスを参照してください:

EmailValidator.java

package com.mkyong;

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.mkyong.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.mkyong.EmailValidator`です。

電子メールが無効な場合、 `FacesMessage`エラーメッセージを返します。

  • Note ** +電子メール正規表現パターンの詳細については、この「link://正規表現/正規表現付きの電子メールアドレスの使用方法/Javaでの電子メールの検証」を参照してください。正規表現]」の記事を参照してください。

3.マネージドBean

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

package com.mkyong;

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コンポーネントを参照してください。

Spring DIをJSFカスタムバリデーターに変換するJSFカスタムバリデーターに

@ Autowired`が必要な場合は、

validatorId`の代わりに `binding`を使います。このポストリンクを読んでください://jsf2/spring-autowired-into-jsf-custom-validator/[Spring @ JSFカスタムバリデーターに帰属]

default.xhtml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      >
    <h:body>

    <h1>Custom validator in JSF 2.0</h1>

      <h:form>

        <h:panelGrid columns="3">

          Enter your email :

          <h:inputText id="email" value="#{user.email}"
            size="20" required="true" label="Email Address">

            <f:validator validatorId="com.mkyong.EmailValidator"/>

          </h:inputText>

          <h:message for="email" style="color:red"/>

        </h:panelGrid>

        <h:commandButton value="Submit" action="result"/>

       </h:form>

    </h:body>
</html>

result.xhtml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      >
    <h:body>

        <h1>Custom validator in JSF 2.0</h1>

      <h:panelGrid columns="2">

        Email Address :
        <h:outputText value="#{user.email}"/>

      </h:panelGrid>

    </h:body>
</html>

5.デモ

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


jsf2-custom-validator-example、title = "jsf2-custom-validator-example"、width = 639、height = 272

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

ダウンロードする – リンク://wp-content/uploads/2010/11/JSF-2-Custom-Validator-Example.zip[JSF-2-Custom-Validator-Example](10KB)

参考文献

  1. link://正規表現/正規表現での電子メールアドレスの検証方法/[Email

Java Regexによる検証]。

JSF 2.0のカスタムコンバータ