1

我有一个 JSF 页面,我在其中迭代一个列表以显示<h:dataTable>一些包含复选框、一些文本和一个文本框的行。我添加了验证,如果选中了一行中的复选框,用户必须在相应的文本框中输入值。另外,我在上面有一个 id 为“copy”的复选框,<h:dataTable>它应该将在第一个文本框中输入的值复制到所有其他文本框中,这些文本框中的复选框在<h:dataTable>.I 中使用了相同的 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吗?

4

1 回答 1

3

换句话说,您希望required仅在选中复选框按下真正的保存按钮时验证输入文本字段?如果是这样,那么您需要required通过另一个检查是否按下保存按钮来扩展该属性。您可以通过请求参数映射中是否存在保存按钮的客户端 ID 来检查。

例如

<h:selectBooleanCheckbox binding="#{checkbox}" .../>
...
<h:inputText ... required="#{checkbox.value and not empty param[save.clientId]}" />
...
<p:commandButton binding="#{save}" ... />
于 2013-09-03T14:38:10.300 回答