JSF 2.0显示多个验证器的所有验证消息

时间:2012-10-15 11:17:33

标签: validation jsf

我有一个带有多个验证器的h:inputText元素,例如:

<h:inputText id="myId" value="#{some.value}">
    <f:validator validatorId="validatorOne/>
    <f:validator validatorId="validatorTwo/>
</h:inputText>
<h:message for="myId"/>

现在,如果我实现我的验证器抛出ValidatorException,第二个验证器将无法运行,即使它也会失败。

但我希望两个验证器都能运行并在两个验证都失败的情况下显示错误消息。

我已经尝试过像这样抛出ValidatorException

    facesContext.addMessage(uiComponent.getClientId(), facesMessage);
    ((UIInput)uiComponent).setValid(false);

h:message不会同时显示这两条错误消息,但如果我使用h:messages,我就会看到它们。

如何显示所有验证错误消息?

1 个答案:

答案 0 :(得分:0)

这就是指定JSF验证器如何工作的方式。验证器按照它们在组件上声明的顺序触发,如果其中一个失败,则不会触发残余。

如果使用<h:messages>实际上不是一个不明原因的选项(也许你不知道它的for属性的工作方式是否相同?),那么你最好的办法是创建另一个验证器然后委托给两个验证器并将捕获的验证器异常合并为一个。