请参阅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>
xmlns:demo="http://demo"
向要在其中使用标记库的任何 Facelets 视图添加声明;您的验证器标签将以表单开头<demo:regexValidator ...
;属性将通过验证器类的自省来获取。