如何立即验证值,但检查只在全提交必需的?(How to validate values instan

2019-07-31 06:57发布

我目前加验证,以一种形式。 有两件事情来检查:本身的价值(例如,如果它是一个正整数或有效的电子邮件)和所有必填字段是否填写的正确性。

但是,如果通过某种方式( f:ajax或ICEfaces的partialSubmit属性)我为类型正确性验证发生一次(例如,当字段失去焦点),它也将检查required在此同一步骤属性。 在大多数情况下,这是没有问题的,因为用户已经输入了值,并有可能纠正它,而不是返回到一个空白的领域。

然而,在他实际上想要再次清除该领域的情况下,他不能再这样做没有得到一个错误。 结果,我只是想检查领域的需要岬上最后提交页面。

目前,我唯一的想法分开的两个验证类型是由豆子后盾的操作方法执行所有必需的检查,从而尝试将其直接通过按钮最终提交。

有另一种方式?

(有关背景:为什么一个可能要再次清除该领域的原因是需求可以取决于形式与其他的选择变化,使人们可以决定一切之后,之后才是正确的,实际上使这个选项不提供这个领域。场可选)。

Answer 1:

只是让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}" />


文章来源: How to validate values instantly, but check for required only on full submit?