Ajax 如何立即验证值,但只在完全提交时检查是否需要?
我目前正在向表单添加验证。有两件事需要检查:值本身的正确性(例如,它是否为正整数或有效电子邮件)以及是否填写了所有必填字段 但是,如果通过某种方式(Ajax 如何立即验证值,但只在完全提交时检查是否需要?,ajax,validation,jsf,required-field,Ajax,Validation,Jsf,Required Field,我目前正在向表单添加验证。有两件事需要检查:值本身的正确性(例如,它是否为正整数或有效电子邮件)以及是否填写了所有必填字段 但是,如果通过某种方式(f:ajax或IceFacespartialSubmit属性),我立即进行类型正确性验证(例如,当字段失去焦点时),它也会在同一步骤中检查required属性。在大多数情况下,这是没有问题的,因为用户已经输入了一个值,并且可能会更正它,而不是返回空白字段 然而,如果他真的想再次清理场地,他就不能再这样做而不出错。因此,我只想在最后提交页面时检查字段的
f:ajax
或IceFacespartialSubmit
属性),我立即进行类型正确性验证(例如,当字段失去焦点时),它也会在同一步骤中检查required
属性。在大多数情况下,这是没有问题的,因为用户已经输入了一个值,并且可能会更正它,而不是返回空白字段
然而,如果他真的想再次清理场地,他就不能再这样做而不出错。因此,我只想在最后提交页面时检查字段的必要性
目前,我唯一能区分这两种验证类型的方法是在backingbeans操作方法中执行所有必需的检查,从而将其直接绑定到最终的submitvia按钮
还有别的办法吗
(背景:人们可能希望再次清除该字段的原因是,需求可能会根据表单中的其他选择而变化。因此,人们可能最终决定不提供该字段,并且只有在这之后才能更正使该字段成为可选的选项。)当确实按下提交按钮时,只需让
required
属性计算true
然而,答案取决于提交按钮执行其逻辑的方式(标准、f:ajax
、ICEfaces等)。但它基本上可以归结为,您可以检查请求参数映射,以获取指示所需提交按钮已按下的请求参数
例如,如果是标准命令按钮:
<h:form id="form">
...
<h:commandButton id="submit" value="Submit" action="#{bean.submit}" />
</h:form>
您甚至可以将两者结合起来:
<c:set var="submitButtonPressed" value="#{not empty param['form:submit'] or param['javax.faces.source'] == 'form:submit'}" />
...
<h:inputText ... required="#{submitButtonPressed}" />
<h:inputText ... required="#{submitButtonPressed}" />
<h:inputText ... required="#{submitButtonPressed}" />
...
<h:form id="form">
...
<h:commandButton id="submit" value="Submit" action="#{bean.submit}">
<f:ajax execute="@form" ... />
</h:commandButton>
</h:form>
<c:set var="submitButtonPressed" value="#{param['javax.faces.source'] == 'form:submit'}" />
...
<h:inputText ... required="#{submitButtonPressed}" />
<h:inputText ... required="#{submitButtonPressed}" />
<h:inputText ... required="#{submitButtonPressed}" />
<c:set var="submitButtonPressed" value="#{not empty param['form:submit'] or param['javax.faces.source'] == 'form:submit'}" />
...
<h:inputText ... required="#{submitButtonPressed}" />
<h:inputText ... required="#{submitButtonPressed}" />
<h:inputText ... required="#{submitButtonPressed}" />