使用Struts Validator,我可以检查所有字段是否为空?

时间:2014-07-31 08:48:18

标签: java validation struts-1 struts-validation

我正在重写旧项目的一部分以使用struts 1 validator framework

我已经在每个单独的字段上调整了验证规则,并使用了可以在其他形式中重复使用的正则表达式,例如:

             

        <field property="idNumber" depends="mask">
            <msg name="mask" key="error.formating.idnumber" />
            <arg position="0" value="SearchForm.idNumber" />
            <var>
                <var-name>mask</var-name>
                <var-value>${maskIdNumber}</var-value>
            </var>
        </field>

还有一个验证需要实现:我需要确保用户在提交之前填写任何字段。查看常见问题解答后,我看到有validwhen这样的条件可用于相互验证字段,但如果我没有弄错,则必须将其附加到其中一个表单上字段。

如果我写这个:

        <field property="idNumber" depends="validwhen">
            <msg name="mask" key="error.form.empty" />
            <arg position="0" value="SearchForm.idNumber" />
            <var>
                <var-name>test</var-name>
                <var-value>(idNumber != null) or (packageNumber != null)</var-value>

            </var>
        </field>    

只有在字段&#34; idNumber&#34;不是空的吧? FAQ说明了

  

任何不需要的字段&#39;如果是,将跳过其他验证   field为null或长度为零。

1 个答案:

答案 0 :(得分:0)

我尝试过使用validwhen,但它是在Stuts 1.2中引入的,我在1.1上,所以我得到错误 No ValidatorAction在为字段idNumber 找到时称为有效。< / p>

我可以使用requiredif但它可能使用我见过的最糟糕的语法。

相反,我遵循了https://stackoverflow.com/a/20086863/113305中的技术,并使用了Struts validator frameworkvalidate()方法:

    public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
    ActionErrors errors = super.validate(mapping, request);

    if (idNumber.length() < 1 && packageNumber .length() < 1) {
        errors.add("emptyForm",
                new ActionError("error.form.empty", "emptyForm"));
    }

    return errors;