Java 在JSF1.2自定义组件中指定验证器

Java 在JSF1.2自定义组件中指定验证器,java,lifecycle,validation,custom-component,jsf-1.2,Java,Lifecycle,Validation,Custom Component,Jsf 1.2,我已经定义了自定义验证器(实现javax.faces.Validator.Validator接口并在faces配置中定义)。我需要我的自定义组件在我的组件代码(渲染器类)中调用这个验证器。 我想使我的xhtml尽可能干净,不想通过嵌入在xhtml中单独调用验证器 <f:validator validatorId='xx' /> 在我的渲染器中处理转换,我可以做一些类似于在渲染器中处理验证的事情吗 谢谢这是在UI组件级别完成的,而不是在渲染器级别。您的自定义输入组件肯定已经扩展了,

我已经定义了自定义验证器(实现javax.faces.Validator.Validator接口并在faces配置中定义)。我需要我的自定义组件在我的组件代码(渲染器类)中调用这个验证器。 我想使我的xhtml尽可能干净,不想通过嵌入在xhtml中单独调用验证器

<f:validator validatorId='xx' /> 
在我的渲染器中处理转换,我可以做一些类似于在渲染器中处理验证的事情吗


谢谢

这是在UI组件级别完成的,而不是在渲染器级别。您的自定义输入组件肯定已经扩展了,否则您将有许多其他(未来)问题和/或您将浪费时间编写重复的代码。如果您的自定义输入组件扩展了
UIInput
,那么您可以通过继承的方法添加
验证器
,例如组件的构造函数

public MyCustomInputComponent() {
    addValidator(new MyCustomValidator());
}

已经实现的方法将自动完成所有转换、验证和消息处理。

谢谢。这正是我想要的。只是好奇为什么getConvertedValue()在渲染器中公开以处理转换,而不是addValidator来处理验证?转换更像是一个渲染作业(在编码HTML标记和解码HTTP参数期间发生),从逻辑上讲是
渲染器的责任。验证不会在渲染期间进行,并且更具体地针对
UIInput
系列的输入组件。验证在验证阶段进行。验证不会操纵输入/输出的值。您可以有多个验证器,但不能有多个转换器。好的,我认为这个JSF设计决策是完全有意义的。为了不进一步延长问题的时间,我需要动态添加/确定验证器(例如,美国与加拿大Zipcode验证器基于以前的inputText值(捕获状态/Provine“信息)。我如何调用addValidator()动态?创建另一个验证器,该验证器根据“以前的值”进一步委托给正确的验证器。您是否建议在第一个验证器的validate()方法中检索从上下文对象输入的“state/province”值并调用相应的zipcode验证器?
public MyCustomInputComponent() {
    addValidator(new MyCustomValidator());
}