Jsf 如何为复合组件中的输入组件指定验证器?
如果我使用的是JSF2.0.4,我应该在Jsf 如何为复合组件中的输入组件指定验证器?,jsf,jsf-2,composite-component,Jsf,Jsf 2,Composite Component,如果我使用的是JSF2.0.4,我应该在faces config.xml中注册自定义验证器吗? 我的自定义验证器使用的验证器接口是javax.faces.validator.validator <cc:myComp id="customcomp1" ... /> <cc:myComp id="customcomp2" ...> <f:validator id="myvalidator" for="myComp" /> </cc:myComp&g
faces config.xml
中注册自定义验证器吗?
我的自定义验证器使用的验证器接口是javax.faces.validator.validator
<cc:myComp id="customcomp1" ... />
<cc:myComp id="customcomp2" ...>
<f:validator id="myvalidator" for="myComp" />
</cc:myComp>
myComp.xhtml
<cc:interface>
<cc:attribute ... />
<!-- more attributes -->
</cc:interface>
<cc:implementation>
<h:panelGroup layout="block">
<h:inputText id="firstName" ... />
<h:inputText id="middleName" ... />
<h:inputText id="lastName" ... />
</h:panelGroup>
</cc:implementation>
否。这在JSF2.0中是不必要的。只需使用@FacesValidator
注释您的验证器即可。注释会自动注册您的验证器。不需要xml。如果您使用的是JSF2,我认为您不需要触摸faces config.xml
文件来创建客户验证器。您只需使用注释@FacesValidator
来声明验证器
。应该是这样的:
@FacesValidator("myValidator")
public class MyValidator implements Validator {
@Override
public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
// Your logic
}
}
然后,您可以在.xhtml页面中开始使用它,例如,
标记:
<f:validator validatorId="myValidator" />
根据您更新的问题中的代码示例,您似乎根本没有将验证器委派给正确的输入,因此验证器完全被忽略
您需要在
中将所需的输入(要为其附加验证器)定义为
...
...
...
上面的
基本上说明了任何
都必须应用于
。因此,应采取以下措施:
<cc:myComp>
<f:validator id="myValidator" for="forName" />
</cc:myComp>
您甚至可以在name
和targets
中使用相同的值,但关键是必须存在
,以便JSF知道验证器应该针对哪个输入组件,也就是说,组合中可以有多个输入组件,您知道。由于某种原因,我的验证器无法工作。请检查editI是否与myValidator类中的上述操作完全相同,但它仍然没有被调用。@Altair:能否发布验证程序以及复合组件的代码?应为单个输入注册验证器,而不是为整个组件注册。您似乎正在使用自定义组件或复合组件。你需要展示你是如何创建它的。也许您只是没有正确地委托验证器。1请为您和Chichiray提供帮助。:)