使用Struts验证器,我可以检查是否所有字段都为空



我正在重写旧项目的部分内容,以使用struts 1验证器框架。

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

        <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>

还有一个验证需要实现:我需要确保用户在提交之前已经填写了任何字段。查看FAQ,我发现有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>    

只有当字段"idNumber"不为空时才会尝试测试,对吗?常见问题说明

任何不是'必需'的字段将跳过其他验证字段为空或长度为零。

我尝试过使用validwhen,但它是在Stuts 1.2中引入的,我在1.1上,所以我得到错误No ValidatorAction called validwhen for field idNumber

我可以使用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;

最新更新