Faceletsでカスタムバリデータを使う

お仕事でビュー層にFaceletsを使ってて。(JSF実装はMyFaces
JSFの標準バリデータが如何せん逝けてないんで、やっぱり実装する必要が発生。
で、ただのバリデータならこんな感じでいいんだけど…。


    

パラメータを使うとなると、タグライブラリもつくらなあかんと。
こうなると、TagクラスにTLDファイルも必要に。
だけどFaceletsを使っていれば、Tagクラスを作ったりしなくてもバリデータが呼べるステキ仕様w
手順としては、taglib.xmlファイルを作成→Faceletsでロード→画面に定義。
これだけ。
やってみると、これが意外に便利便利。
ちなみにバリデータはJSFで用意されてるValidatorのサブクラスでOK。
作ったバリデータはfaces-config.xmlに追加しておく。

[/WEB-INF/validator.taglib.xml]

    http://d.hatena.ne.jp/gsh-kz
    
        numericValidator
        
            numericValidator
        
    

namespaceタグで定義した名前空間で画面で使用するタグ(xmlns)に。
tagタグで囲んだ中にバリデータを宣言。
validator-idはfaces-config.xmlに宣言してあるID。


作成したtaglib.xmlをFaceletsがロードするには、web.xmlに以下を追加。

[/WEB-INF/web.xml]

    facelets.LIBRARIES
    /WEB-INF/validator.taglib.xml

これで起動時にFaceletsが指定したパスからロードすると。


あとは使いたい画面(*.xhtml)で


    
        
    

てかんじ。
これだとパラメータ(例だとmaxLength)が使えたりと、便利。


パラメータを使ったバリデータの作り方は省略。
つか、パラメータのセッタを用意してfaces-config.xmlにそれぽいタグ追加するだけだけど^^;
むしろパラメータの保持復元にはまったのは内緒w