例如,我有一个名为
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"));
}
}
问题是这个解决方案仅在调用
register
操作时才有效。
无论如何,它不会在
login
或logout
上工作,因为它会检查字段是否不null
或电子邮件是否正确,并且总是会给出错误。
好吧,注销的解决方案是在其上方添加
@SkipValidation
注释,但我不知道如何告诉它login
只有2个字段username
和password
,而且不需要检查email
和phone
也是。我不想为每个动作部分编写一个Action
类,因为Struts 2的目的不是这个。
创建
validateMethodName
方法,其中 methodName
是方法的名称,例如,
validateLogin() { ... }
否则,请向您的
validate
方法提供某种形式的上下文信息。
使用注释,用
注释你的操作方法
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
字段。其他动作方法类似。
参考资料: