JSF复合组件验证

我想创建复合组件并将一些验证器附加到它的子节点,但我希望验证中的消息附加到复合组件,而不是它的子节点.

在使用复合组件的页面中,我想要这样的东西:

<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)

点赞