我想创建复合组件并将一些验证器附加到它的子节点,但我希望验证中的消息附加到复合组件,而不是它的子节点.
在使用复合组件的页面中,我想要这样的东西:
<zzz:mycomponent id="my" />
<h:message for="my" />
现在它不起作用,因为消息是组件的子节点,而不是组合组件本身.如何制作整个组件?
或者甚至更好,我想在复合组件中添加验证器,例如:
<zzz:mycomponent id="my" validator="#{bean.validateComposite}" />
接收器就像布尔值数组一样,因为复合组件里面有h:selectBooleanCheckbox元素.那可能吗?
最佳答案 可能很晚才回答这个问题,但这是我应该怎么做的:
<zzz:mycomponent id="my">
<f:event type="postValidate" listener="#{bean.doValidation}"/>
</zzz:mycomponent>
然后在“容器”中验证子项后调用doValidation.方法看起来像这样:
public void doValidation(ComponentSystemEvent event) {
...
}
并且您在该方法中有两个选项:
>访问子组件(event.getComponent().getChildren())并对您在这些子项上提交的值执行任何操作.
>或者遍历FacesMessages并重新分配clientId,以便将它们放在容器组件上(id = my)