建议的解决方案不起作用,而且过于复杂。 JSF 1.2 中不需要处理程序类,验证器标记中根本不支持处理程序类。
所以你只需要。
验证者:
public class CustomValidator implements Validator, Serializable
{
private static final long serialVersionUID = ...;
private String someAttribute;
public void setSomeAttribute(String someAttribute)
{
this.someAttribute = someAttribute;
}
@Override
public void validate(FacesContext context, UIComponent component, Object value)
throws ValidatorException
{
// Do validation
}
}
faces-config.xml中自定义验证器的声明/注册
<validator>
<validator-id>customValidator</validator-id>
<validator-class>package.CustomValidator</validator-class>
</validator>
taglib.xml(例如 my.taglib.xml):
<?xml version="1.0"?>
<!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>
<namespace>http://myNS.com/jsf</namespace>
<tag>
<tag-name>myCustomValidator</tag-name>
<validator>
<validator-id>customValidator</validator-id>
</validator>
</tag>
</facelet-taglib>
终于在web.xml中注册了taglib.xml:
<context-param>
<param-name>facelets.LIBRARIES</param-name>
<param-value>/WEB-INF/my.taglib.xml</param-value>
</context-param>
所以这一切都不需要处理程序:-)