Struts 2 中特定字段的手动验证

问题描述 投票:0回答:2

例如,我有一个名为

Action
UsersAction
类,其中有一些方法,例如:
login
logout
register
等。

我写了

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
并且不需要检查
email
还有
phone
。我不想为每个动作部分编写一个动作类,因为 Struts 2 的目的不是这个。

java validation struts2 annotations
2个回答
6
投票

创建

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

validateLogin() { ... }

否则,请向您的

validate
方法提供某种形式的上下文信息。


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")}")
})

它只会验证

username
passsword
字段。其他动作方法类似。

参考资料:

© www.soinside.com 2019 - 2024. All rights reserved.