4

我有一个包含 3 个字段的表单,并提交按钮。单击按钮时,如果在 3 个字段中未输入任何内容,则抛出验证消息。如果输入了 3 个字段中的任何一个,则处理数据并使用数据表在同一页面中显示结果。我可以为一个字段抛出验证消息,但不能为 2 个或更多字段抛出验证消息。这是我的代码。同样,如果我需要传递一个 long 值,并验证我该怎么做,因为 long 值不能被验证为isEmpty()or isNull()

这是我的代码,我想将它与多个字段一起使用,并且对具有长值的字段进行验证。

<h:inputText id="userName" value="#{user.userName}" required="true"
    requiredMessage="Please enter username" />

<h:inputText id="empId" value="#{user.empId}" required="true"
    requiredMessage="Please enter Employee Id" />

<h:inputText id="acctNm" value="#{user.acctNm}" required="true" 
    requiredMessage="Please enter Employee Id" />
4

2 回答 2

6

只需让required每个字段的属性检查其他字段的提交值是否存在。提交的值在参数映射中可用#{param}客户端 ID 作为键。

这是一个启动示例:

<h:form id="form">
    <h:inputText id="field1" ... required="#{empty param['form:field2'] and empty param['form:field3']}" />
    <h:inputText id="field2" ... required="#{empty param['form:field1'] and empty param['form:field3']}" />
    <h:inputText id="field3" ... required="#{empty param['form:field1'] and empty param['form:field2']}" />
</h:form>

随着字段数量的增加,它只会变得更加丑陋。

或者,您可以使用OmniFaces <o:validateOneOrMore>

<h:form id="form">
    <h:inputText id="field1" ... />
    <h:inputText id="field2" ... />
    <h:inputText id="field3" ... />

    <o:validateOneOrMore id="oneOrMore" components="field1 field2 field3" />
    <h:message for="oneOrMore" />
</h:form>

请注意,在操作方法中执行验证是糟糕的设计。您应该为此使用标准 JSF 验证工具,例如requiered、和/或。validator<f:validator><f:validateXxx>

于 2012-10-22T14:10:01.487 回答
0

至少对于 iceFaces 而言,另一种跨多个字段进行验证的方法,尤其是当验证比“必需”更复杂时,是在支持 bean 中使用应用程序级验证。

@see支持 Beans 中的自定义验证器

  • 将验证器属性添加到您的 rcomponent 并将其指向支持 bean 中的验证方法
  • 在支持 bean 中,您现在可以访问所有表单字段并进行交叉验证

问候

于 2013-08-22T09:26:12.713 回答