JSF(Java Server Faces)のカスタムバリデータ

カスタムバリデータを作るのは作業が多く、結構大変です。

  1. バリデータのクラス(***Validator.java)を作る。
  2. バリデータのカスタムタグのクラス(***ValidatorTag.java)を作る。
  3. faces-config.xmlに、バリデータのクラスを記述する。

    <validator>
      <validator-id>int</validator-id>
      <validator-class>stncl02.validator.IntValidator</validator-class>
      <attribute>
        <attribute-name>errorMessage</attribute-name><attribute-class>java.lang.String</attribute-class>
      </attribute>
      <attribute>
        <attribute-name>key</attribute-name><attribute-class>java.lang.String</attribute-class>
      </attribute>
      <attribute>
        <attribute-name>itemLabel</attribute-name><attribute-class>java.lang.String</attribute-class>
      </attribute>
    </validator>
    

  4. カスタムタグのクラスを書いたTLD(タグライブラリディスクリプタ)ファイルを作り、 WEB-INFに配置する。

    <?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>
    <tlibversion>1.0</tlibversion>
    <jspversion>1.2</jspversion>
    <shortname>validator-extend</shortname>
    <uri>validator-extend</uri>
    <tag>
      <name>validateInt</name>
      <tag-class>stncl02.validator.IntValidatorTag</tag-class>
      <attribute>
        <name>errorMessage</name><required>false</required>
      </attribute>
      <attribute>
        <name>key</name><required>false</required>
      </attribute>
      <attribute>
        <name>itemLabel</name><required>false</required>
      </attribute>
    </tag>
    </taglib>
    

  5. 各JSPの冒頭では、上記のTLDを参照するtaglibディレクティブを記述する。

    <%@ taglib uri="/WEB-INF/validator-extend.tld" prefix="mmm" %>
    

こんな感じです。実際のクラスについてもいずれメモすることにします。

それで何でもStrutsと比べるのはいささかいかがかと思いますが、 気になる木になる点

  • 1個のバリデーションにつきクラスを2個ずつ書かないといけないのはかったるく、保守性が悪い。
  • エラーメッセージの生成方法について、もう少し高レベルでフレームワーク化してほしい (MessageFormatでFormatするところまで自分で書かないといけないのは??)
  • requiredだけがUIコンポーネントの属性になっているのが少し気持ち悪い。
です。

Server Side Java Index Top

(first uploaded 2006/04/16 last updated 2006/04/16, URANO398)

テレワークならECナビ Yahoo 楽天 LINEがデータ消費ゼロで月額500円〜!
無料ホームページ 無料のクレジットカード 海外格安航空券 海外旅行保険が無料! 海外ホテル