如何立即验证值,但仅在完全提交时检查所需值



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

然而,如果通过某种方式(f:ajax或IceFaces partialSubmit属性),我立即进行类型正确性验证(例如,当字段失去焦点时),它也会在同一步骤中检查required属性。在大多数情况下,这是没有问题的,因为用户已经输入了一个值,并且可能会更正它,而不是返回到空白字段。

然而,在他真的想再次清理场地的情况下,他再也无法做到这一点而不出现错误。因此,我只想在最终提交页面时检查所需字段的数量。

目前,我将这两种验证类型分开的唯一想法是在backingbeans操作方法中执行所有必需的检查,从而将其直接绑定到最终的submit via按钮。

还有别的办法吗?

(对于背景:人们可能想再次清除该字段的原因是,根据表单中的其他选择,要求可能会发生变化。因此,人们可能会决定根本不提供该字段,只有在这之后,才能更正使该字段成为可选字段的选项。)

当真正按下提交按钮时,只需让required属性评估true即可。

然而,答案取决于提交按钮执行其逻辑的方式(标准、f:ajax、ICEfaces等)。但它基本上可以归结为,您可以在请求参数映射中检查一个请求参数,该参数指示所需的提交按钮已被按下。

例如,如果是标准命令按钮:

<h:form id="form">
    ...
    <h:commandButton id="submit" value="Submit" action="#{bean.submit}" />
</h:form>

然后,您可以通过检查按钮的客户端ID是否存在于请求参数映射中来进行检查:

<c:set var="submitButtonPressed" value="#{not empty param['form:submit']}" />
...
<h:inputText ... required="#{submitButtonPressed}" />
<h:inputText ... required="#{submitButtonPressed}" />
<h:inputText ... required="#{submitButtonPressed}" />

或者,如果是<f:ajax>按钮:

<h:form id="form">
    ...
    <h:commandButton id="submit" value="Submit" action="#{bean.submit}">
        <f:ajax execute="@form" ... />
    </h:commandButton>
</h:form>

然后,您可以通过检查javax.faces.source参数是否等于按钮的客户端ID:来进行检查

<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}" />

相关内容

  • 没有找到相关文章

最新更新