我有一个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
答案 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}" ... />