JEE5チュートリアルのカスタムバリデーターの作成を参照してください。「カスタムタグの作成」セクションでは、クラスを実装する方法について詳しく説明しています。ValidatorELTag
for="myControl"
この属性が必要になるとは思えません(どのように使用するかはわかりません)。バリデーターは親コントロールに設定されます。for
属性は通常、ラベルコンポーネントのように、あるコントロールが別のコントロールを参照する場合にのみ使用されます。
編集:私は質問を読み間違えました。上記の答えはJSPに適用されます(コアJSF 1.2のタグ関連クラスはJSP専用です。Faceletsには独自のタグシステムがあります。幸いなことに、タグを定義するためのJavaクラスは必要ありません)。
サンプルバリデーター:
public class RegexValidator implements Validator, StateHolder {
private boolean isTransient;
private String regex;
public String getRegex() { return regex; }
public void setRegex(String regex) { this.regex = regex; }
public void validate(FacesContext context, UIComponent component, Object value)
throws ValidatorException {
//TODO: throw ValidatorException if not valid
}
//TODO: implement remaining StateHolder methods...
}
このバリデーターは、:に登録されますfaces-config.xml
。
<validator>
<validator-id>regex.validator</validator-id>
<validator-class>val.RegexValidator</validator-class>
</validator>
次に、タグライブラリをアプリに追加します(例WEB-INF/facelets/foo.taglib.xml
)。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE facelet-taglib PUBLIC
"-//Sun Microsystems, Inc.//DTD Facelet Taglib 1.0//EN"
"http://java.sun.com/dtd/facelet-taglib_1_0.dtd">
<facelet-taglib xmlns="http://java.sun.com/JSF/Facelet">
<namespace>http://demo</namespace>
<tag>
<tag-name>regexValidator</tag-name>
<validator>
<validator-id>regex.validator</validator-id>
</validator>
</tag>
</facelet-taglib>
タグライブラリを使用するFaceletsビューに宣言を追加xmlns:demo="http://demo"
します。バリデータータグは次の形式で始まり<demo:regexValidator ...
ます; 属性は、バリデータークラスのイントロスペクションを通じて取得されます。