2011-05-02 62 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