2012-10-15 131 views
1

我有一個h:inputText元素與一個以上的驗證,如:JSF 2.0顯示多個驗證的所有驗證信息

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

現在,如果我實現了我的驗證扔ValidatorException,第二確認不會運行,即使它也會失敗。

,但我想這兩個驗證運行,並diplay的情況下,兩個錯誤信息都驗證失敗。

我已經儘量不扔ValidatorException這樣的:

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

h:message不會同時顯示錯誤信息,但我能看到他們,如果我用h:messages

如何顯示所有驗證錯誤消息?

+1

要看到他們所有人,你會使用'h:messages',但你已經知道這一點。我很確定'h:message'只會顯示一條驗證消息。如果這不夠好,您可能需要創建一個自定義組件。 –

回答

0

這就是JSF驗證器如何指定工作方式。驗證器按照它們在組件上聲明的順序被觸發,並且如果其中一個失敗,那麼剩餘不會被觸發。

如果使用<h:messages>是真的不爲一些不明原因(也許你不知道關於它的for屬性,它以同樣的方式?)的選項,那麼您最好的選擇是創建另一個驗證這又委託給兩個驗證器並將捕獲的驗證器異常合併爲一個。

+0

我試圖用這個像你描述的,但實際上,我是用primefaces'''不工作的方式爲''(事實上我使用這個首次)相同。如果我在前者中設置'for'屬性,則不顯示任何消息,而後者顯示正確的結果。也許在primefaces中的錯誤?仍然是我的錯,因爲沒有對'h'命名空間進行測試。 –

+1

報告給PrimeFaces。在未來的JSF問題中,請討論真正的代碼,而不是將其混淆/簡化爲標準組件集。 – BalusC