JSF1.1 カスタムバリデータタグ

感想おまちしてます!

カスタムバリデータタグの作成に必要なのは以下のとおり。

  • バリデータクラス作成
  • faces-config.xmlへ登録
  • カスタムタグクラス作成
  • TLDファイル作成
  • JSPで利用
スポンサーリンク

バリデータクラスの作成

今回は正規表現でチェックするバリデータを作ってみました。

package com.daipresents.kingdom.validator;

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

/**
 * 正規表現チェックパリデータクラス
 * 
 * @author Dai Fujihara
 * 
 * 2005/12/12 10:22:33
 */
public class RegExpValidator implements Validator {

 /** 属性pattern 正規表現が設定されます */
 private String pattern;
 
 /**
  * 正規表現で書式チェックを行います。
  */
 public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
 
  String text = value.toString();
  if(!text.matches(pattern)){
   throw new ValidatorException(new FacesMessage("書式が違います。"));
  }
  
 }
 
 /**
  * 正規表現文字列を設定します。
  * @param pattern
  */
 public void setPattern(String pattern){
  this.pattern = pattern;
 }

}

faces-config.xmlへ登録

作ったバリデータクラスを登録します。

<validator>
 <validator-id>RegExpValidator</validator-id>
 <validator-class>
  com.daipresents.kingdom.validator.RegExpValidator
 </validator-class>
 <attribute>
  <attribute-name>pattern</attribute-name>
  <attribute-class>java.lang.String</attribute-class>
 </attribute>
</validator>

カスタムタグクラス

カスタムバリデータを使用するTaglibを作成します。

jsf-impl.jarをみると、「com.sun.faces.taglib」以下にある「html_basicフォルダ」、「jsf_coreフォルダ」にタグクラスを配置している。

package com.daipresents.kingdom.taglib;

import javax.faces.validator.Validator;
import javax.faces.webapp.ValidatorTag;
import javax.servlet.jsp.JspException;

import com.daipresents.kingdom.validator.RegExpValidator;

/**
 * 正規表現チェックバリデータカスタムタグ。
 * 
 * @author Dai Fujihara
 * 
 * 2005/12/12 10:18:36
 */
public class RegExpValidatorTag extends ValidatorTag{
 
 /** 正規表現文字列 */
 private String pattern;
 
 /** コンストラクタ */
 public RegExpValidatorTag(){
  setValidatorId("RegExpValidator");
 }
 
 protected Validator createValidator() throws JspException {
  //RegExpValidator validator = new RegExpValidator();
  RegExpValidator validator =  (RegExpValidator)super.createValidator();
  validator.setPattern(pattern);
  return validator;
 }

 /**
  * 正規表現文字列を取得します。
  * @return 正規表現文字列
  */
 public String getPattern() {
  return pattern;
 }

 /**
  * 正規表現文字列を設定します。
  * @param pattern
  */
 public void setPattern(String pattern) {
  this.pattern = pattern;
 }
}

TLDファイル

Taglibを使えるようにTLDファイルを作成します。

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE taglib
PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">

<taglib>
 <tlib-version>1.0</tlib-version>
 <jsp-version>1.2</jsp-version>
 <short-name>kd</short-name>
 <uri>http://daipresents.com/</uri>
 <description>
  kingdom taglib.
 </description>
 <tag>
  <name>validateRegExp</name>
  <tag-class>com.daipresents.kingdom.taglib.RegExpValidatorTag</tag-class>
  <attribute>
   <name>pattern</name>
   <required>true</required>
  </attribute>
 </tag>
</taglib>

JSPの書き方

まずは作成したタグリブを教えてあげるためにJSPの上のほうに以下を記述します。

<%@ taglib uri="../WEB-INF/kingdom.tld" prefix="kd" %>

これで実際に使えるようになったので使ってみましょう。

<h:outputText value="ユーザID" />
 <h:inputText value="#{Login.userID}">
 <kd:validateRegExp pattern="[a-zA-Z]"/>
</h:inputText>

pic20080511_003920

ほーらできあがり。