在ajax调用期间关闭Validations

时间:2013-09-03 14:31:36

标签: jsf validation

我有一个JSF页面,我在其中迭代一个列表以显示<h:dataTable>,其中包含一些包含复选框,一些文本和一个文本框的行。我添加了验证,如果选中了行中的chechbox,则用户必须在相应的文本框中输入值。此外,我在<h:dataTable>上方有一个ID为'copy'的复选框,该复选框应将第一个文本框中输入的值复制到<h:dataTable>内复选了其复选框的所有其他文本框。我使用了ajax调用同样的。

 <h:form prependId="false" id="form">
 <h:selectBooleanCheckbox value="#{bean.copy}" id="copy">
        <p:ajax process="#{bean.mailId}"
            event="change" partialSubmit="true" 
            listener="#{Controller.copyEmail()}"
            update="rm">
        </p:ajax>
    </h:selectBooleanCheckbox>

   <h:dataTable id="rm" width="100%" cellspacing="4"
        value="#{controller.alertTriggers}" var="alt"
            columnClasses="c1,c2,c3,c4">  
            <h:column>
                  <h:selectBooleanCheckbox value="#{alt.checkValue}" id="checkbox" binding="#{checkbox}"/>
               </h:column>
                <h:column>
                   <h:outputText value="#{alt.id}" />                                       
                </h:column>
                <h:column>
                  <h:outputFormat value="#{alt.msg1}" />                              
                </h:column>
                <h:column>                                              
                     <h:message for="emailID" id="email" styleClass="validation-error"/>
                     <h:inputText value="#{alt.mailId}" id="emailID" style="width: 87%;" required="#{checkbox.value}" requiredMessage="Enter the value"/>

                </h:column>                                         

  </h:dataTable>                                          
 </h:form>  

在控制器中

public void copyEmail() {

//code for copying the first textbox value to all other textboxes

}

验证工作正常,但当我选中复制复选框时,文本框值不会复制到其他文本框。而是显示验证错误。如果我从文本框中删除验证,复制部分工作正常。

我尝试使用immediate=true进行ajax调用,但<h:dataTable>内的复选框值未在控制器中更新。

所以,总结

我想在ajax调用期间关闭我的验证。除了immediate=true

之外,还有其他办法吗?

1 个答案:

答案 0 :(得分:3)

换句话说,只有在选中复选框按下真实保存按钮时,才要将输入文本字段验证为required?如果是这样,那么如果按下了保存按钮,则需要再次检查required属性。您可以通过请求参数映射中存在保存按钮的客户端ID来检查它。

E.g。

<h:selectBooleanCheckbox binding="#{checkbox}" .../>
...
<h:inputText ... required="#{checkbox.value and not empty param[save.clientId]}" />
...
<p:commandButton binding="#{save}" ... />