java - Struts:同时验证两个字段

标签 java validation struts struts-1 struts-validation

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

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

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

最佳答案

如果使用 ValidatorFormvalidate 方法,验证两个或多个字段就太容易了。

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

This is an example of how you could compare two fields to see if they have the same value. A good example of this is when you are validating a user changing their password and there is the main password field and a confirmation field.

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

}

关于java - Struts:同时验证两个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31706705/

相关文章:

java - 我怎样才能让 JScrollPane 填充 JPanel 的高度

java - 我应该将 Struts 1 或 2 与 jQuery 一起使用吗?

java - XML 解析失败

java - 如何使用netbeans验证java swing浮点值最多两个字段中的jtextfield

c# - 如何验证字符串是否采用 YYYY-MM-DD 形式 (C#)

node.js - 当nestjs中的正文验证失败时如何阻止文件上传

java - 我如何将值从 javascript 传递到 struts2 中的 java 类?

java - 为什么一个Struts 2 拦截器不能修改后续拦截器生成的 'result' 页面?

java - 使用OpenCv Java对水表进行图像预处理,使用Tesseract进行OCR

java - 如何使用 Java 将 RAW 数据写入文件?例如与 : nc -l 8000 > capture. raw 相同