在Struts 2中对特定字段进行手动验证

时间:2013-06-25 17:41:50

标签: java validation struts2 annotations

例如,我有一个名为Action的{​​{1}}类,其中有一些方法,例如:UsersActionloginlogout,等等。< / p>

我写了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")); } } 注释,但我不知道如何告诉它登录只有2个字段@SkipValidationusername而且它不是检查passwordemail也是必要的。我不想为每个动作部分写一个Action类,因为Struts 2的目的不是这个。

2 个答案:

答案 0 :(得分:6)

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

validateLogin() { ... }

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

答案 1 :(得分: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字段。与其他行动方法类似。

<强>参考文献: