Struts:一次验证两个字段

时间:2015-07-29 16:59:21

标签: java validation struts struts-1 struts-validation

我是struts的新手,我遇到了一个我无法解决的问题。

问题是,我在.jsp页面中有两个日期字段,两者都是必需的。 简而言之,我有两个需要的字段,但是如果它们都是空的,我就无法收到两个错误消息。必须显示的唯一消息是"请插入日期间隔",无论哪一个是空的(或者,如果它们都是空的)。

我正在使用validation.xml,Struts版本1.3

1 个答案:

答案 0 :(得分:1)

如果您使用ValidatorFormvalidate方法,则对两个或多个字段的验证过于简单。

要使用声明式自定义验证程序,您需要阅读this参考指南,其中包含自定义验证程序的链接和示例,以验证两个字段。

  

这是一个如何比较两个字段以查看它们是否具有相同值的示例。一个很好的例子是当您验证用户更改密码并且有主密码字段和确认字段时。

<validator name="twofields"
       classname="com.mysite.StrutsValidator"
       method="validateTwoFields"
       msg="errors.twofields"/>

<field property="password"
       depends="required,twofields">
          <arg position="0" key="typeForm.password.displayname"/>
          <var>
             <var-name>secondProperty</var-name>
             <var-value>password2</var-value>
          </var>
</field>
public class CustomValidator {

    // ------------------------------------------------------------ Constructors

    /**
     * Constructor for CustomValidator.
     */
    public CustomValidator() {
        super();
    }

    // ---------------------------------------------------------- Public Methods

    /**
     * Example validator for comparing the equality of two fields
     *
     * http://struts.apache.org/userGuide/dev_validator.html
     * http://www.raibledesigns.com/page/rd/20030226
     */
    public static boolean validateTwoFields(
        Object bean,
        ValidatorAction va,
        Field field,
        ActionMessages errors,
        HttpServletRequest request) {

        String value =
            ValidatorUtils.getValueAsString(bean, field.getProperty());
        String property2 = field.getVarValue("secondProperty");
        String value2 = ValidatorUtils.getValueAsString(bean, property2);

        if (!GenericValidator.isBlankOrNull(value)) {
            try {
                if (!value.equals(value2)) {
                    errors.add(
                        field.getKey(),
                        Resources.getActionMessage(request, va, field));

                    return false;
                }
            } catch (Exception e) {
                errors.add(
                    field.getKey(),
                    Resources.getActionMessage(request, va, field));
                return false;
            }
        }
        return true;
    }

}