5月 11th, 2008at 0:39

Tags:

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 taglibPUBLIC "-//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>

ほーらできあがり。

このエントリーをはてなブックマークに追加