5

例如,我有一个Action名为的类UsersAction,其中有一些方法,例如:、、、login等等。logoutregister

我写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 个字段username,并且password也不需要检查。我不想部分地为每个动作编写一个动作类,因为 Struts 2 的目的不是这个。emailphone

4

2 回答 2

6

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

validateLogin() { ... }

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

于 2013-06-25T18:29:06.380 回答
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字段。其他动作方法也类似。

参考:

于 2013-06-25T19:33:02.023 回答