2

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

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

但是,如果他真的想再次清场,他就不能再不报错了。因此,我只想在最终提交页面时检查字段的必要性。

目前,分离这两种验证类型的唯一想法是在支持 bean 操作方法中执行所有必需的检查,从而将其直接绑定到最终通过按钮提交。

还有其他方法吗?

(作为背景:人们可能想要再次清除该字段的原因是要求可能会根据表单中的其他选择而改变。因此,人们可能最终决定不提供此字段,并且只有在更正实际使该字段的选项之后字段可选。)

4

1 回答 1

2

只需让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}" />
于 2012-09-18T12:56:30.393 回答