2011-05-02 65 views
3

我想用AJAX驗證所有輸入字段。JSF和Ajax驗證 - 如何更新所有消息的消息面板?

例如,有3個輸入欄。其中兩個需要最少3個字符的長度,另一個通過簡單的正則表達式進行驗證。對於<f:ajax>,我設置了keyup事件以快速查看即將到來的ajax驗證。一個完整的例子可能是這樣的:

<h:form> 
     <h:messages id="messages" /> 
     <h:inputText id="text1" value="#{bean.text1}"> 
      <f:validateLength minimum="3" /> 
      <f:ajax execute="@this" event="keyup" render="messages" /> 
     </h:inputText> 

     <h:inputText id="text2" value="#{bean.text2}"> 
      <f:validateLength minimum="3" /> 
      <f:ajax execute="@this" event="keyup" render="messages" /> 
     </h:inputText> 

     <h:inputText id="text3" value="#{bean.text3}"> 
      <f:validateRegex pattern="[A-Z][a-zA-Z]*" /> 
      <f:ajax execute="@this" event="keyup" render="messages" /> 
     </h:inputText> 
    </h:form> 

一旦我離開輸入第一個輸入欄的錯誤並跳轉到第2場和類型無效的東西在那裏,從第一個無效的字段信息消失,因爲消息被重新渲染!一旦我開始在第一個輸入字段中輸入內容,將執行設置爲@form將導致所有字段被驗證。

所以我的問題是: 如何顯示與AJAX的所有驗證錯誤,而不是從最後一個無效字段的最後一條消息?

P.S。:林在WebSphere

回答

7

不可能使用鑽嘴魚科2.0.3(+ RichFaces的+ Primefaces)。最好你可以做的只是給每個輸入自己的信息。

<h:form> 
    <h:panelGrid columns="2"> 
     <h:inputText id="text1" value="#{bean.text1}"> 
      <f:validateLength minimum="3" /> 
      <f:ajax event="keyup" render="text1message" /> 
     </h:inputText> 
     <h:message id="text1message" for="text1" /> 

     <h:inputText id="text2" value="#{bean.text2}"> 
      <f:validateLength minimum="3" /> 
      <f:ajax event="keyup" render="text2message" /> 
     </h:inputText> 
     <h:message id="text2message" for="text2" /> 

     <h:inputText id="text3" value="#{bean.text3}"> 
      <f:validateRegex pattern="[A-Z][a-zA-Z]*" /> 
      <f:ajax event="keyup" render="text3message" /> 
     </h:inputText> 
     <h:message id="text3message" for="text3" /> 
    </h:panelGrid> 
</h:form> 

您最終可以將它們組合在窗體上方。

+0

thx爲快速回答,我標記爲正確的。我將嘗試將建議的功能作爲組合包裝。挑戰將是「收集」並對每個(輸入)組件的ID進行分組,並將它們鏈接到頁面頂部的消息組中。對此有何建議/解決方案?其他人如何做這樣的事情? – jonnie119 2011-05-03 04:48:34