Ajax 如何立即验证值,但只在完全提交时检查是否需要?

Ajax 如何立即验证值,但只在完全提交时检查是否需要?,ajax,validation,jsf,required-field,Ajax,Validation,Jsf,Required Field,我目前正在向表单添加验证。有两件事需要检查:值本身的正确性(例如,它是否为正整数或有效电子邮件)以及是否填写了所有必填字段 但是,如果通过某种方式(f:ajax或IceFacespartialSubmit属性),我立即进行类型正确性验证(例如,当字段失去焦点时),它也会在同一步骤中检查required属性。在大多数情况下,这是没有问题的,因为用户已经输入了一个值,并且可能会更正它,而不是返回空白字段 然而,如果他真的想再次清理场地,他就不能再这样做而不出错。因此,我只想在最后提交页面时检查字段的

我目前正在向表单添加验证。有两件事需要检查:值本身的正确性(例如,它是否为正整数或有效电子邮件)以及是否填写了所有必填字段

但是,如果通过某种方式(
f:ajax
或IceFaces
partialSubmit
属性),我立即进行类型正确性验证(例如,当字段失去焦点时),它也会在同一步骤中检查
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}" />