【问题标题】:Manual validation in Struts 2 on specific fields在 Struts 2 中对特定字段进行手动验证
【发布时间】:2013-06-25 17:41:50
【问题描述】:

例如,我有一个名为 UsersActionAction 类,其中我有一些方法,例如:loginlogoutregister 等等。

我写了validate()方法如下:

@Override
public void validate() {
    if ("".equals(username)) {
        addFieldError("username", getText("username.required"));
    }
    if ("".equals(email)) {
        addFieldError("email", getText("email.required"));
    } else if (!Utils.isValidEmail(email)) {
        addFieldError("email", getText("invalid.email.address"));
    }
    if ("".equals(phone)) {
        addFieldError("phone", getText("phone.required"));
    }
    if ("".equals(password)) {
        addFieldError("password", getText("password.required"));
    }
}

问题是这个解决方案只有在调用注册操作时才有效,无论如何它在登录或注销时不起作用,因为它会检查字段是否为空或电子邮件是否正确并且总是会出错。好的,注销的解决方案是在其上方添加@SkipValidation注释,但我不知道如何告诉它登录只有2个字段usernamepassword,并且没有必要检查email还有phone。我不想部分地为每个动作编写一个动作类,因为 Struts 2 的目的不是这个。

【问题讨论】:

    标签: java validation struts2 annotations


    【解决方案1】:

    创建validateMethodName方法,其中methodName是方法的名称,例如,

    validateLogin() { ... }
    

    否则,为您的 validate 方法提供某种形式的上下文信息。

    【讨论】:

    • 我试过validate_methodName,但它没有通过它。 provide some form of contextual information to your validate method. 是什么意思?
    • @Ferrago 抱歉,我是validateLogin。不过,为什么不切换到 XML 来进行简单的验证呢?
    • 谢谢,现在可以使用了。因为我需要一个更快的解决方案,所以我认为 xml 是更多的时间消费者,你不觉得吗?无论如何,在此之前我没有使用任何框架进行验证(只是一些手动“验证”),我最近开始使用验证框架,所以我没有太多经验
    • @Ferrago 我对哪个更好/更差感到矛盾。简单 XML 验证的好处是它们也可以用于驱动客户端验证,尽管默认情况下并非支持所有验证器。
    • 如果 JS 在客户端被禁用?
    【解决方案2】:

    使用注解,在你的动作方法login上注解

    @Action(value="login", results = {
      @Result(name="input", location = "/login.jsp")
    },interceptorRefs = @InterceptorRef(value="defaultStack", params = {"validation.validateAnnotatedMethodOnly", "true"}))
    @Validations(requiredFields = {
      @RequiredFieldValidator(type = ValidatorType.FIELD, fieldName = "username", message = "${getText("username.required")}"),
      @RequiredFieldValidator(type = ValidatorType.FIELD, fieldName = "password", message = "${getText("password.required")}")
    })
    

    它只会验证usernamepasssword 字段。其他操作方法类似。

    参考资料:

    【讨论】:

    • 抱歉,我根本没有使用注解,@SkipValidation 参数用于基于 xml 的配置
    • 你误会了,不是参数,是注解。
    • 好的,谢谢,但无论如何我没有使用基于注释的配置,而是基于 xml。
    • 好的,我会给你参考,帮助你用 xml 重写它。
    • 感谢您的宝贵时间,无论如何@Dave Newton 的回答对我来说是最好的,感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-03
    • 1970-01-01
    • 1970-01-01
    • 2016-08-21
    • 1970-01-01
    • 2014-04-25
    • 2011-10-25
    相关资源
    最近更新 更多