[size=medium]Struts 2也支持用Java注解配置数据校验。Action同样需要继承自[color=red]ActionSupport[/color]类,并用@Validation注解,表示该Action需要数据校验。然后在方法上配置@Validations。[color=red]@Validations[/color]可指定多条校验规则,具体的配置见下面的代码:
代码17.11 BookAction.java[/size]
[size=medium]该配置与上面的XML配置是等价的。因为只对addBook.action进行校验,因此只在方法add()上添加了@Validations以及校验规则。其他不需要校验的方法需要加上[color=red]@SlipValidation[/color],否则也会被校验。
另外,使用@Validator时Struts 2默认的验证方式是全局验证模式,因此只能配置一种验证方式。如果要对同一个Action的两个方法配置两种不同的验证方式,需要重写Struts 2的默认拦截器。
注意:被校验的Action要继承ActionSupport类,并要在action配置中指定名为input的JSP,因为Struts 2在校验失败后会自动返回input页面。[/size]
代码17.11 BookAction.java[/size]
package com.helloweenvsfei.struts2.action;
import org.apache.struts2.interceptor.validation.SkipValidation;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.validator.annotations.DateRangeFieldValidator;
import com.opensymphony.xwork2.validator.annotations.RequiredStringValidator;
import com.opensymphony.xwork2.validator.annotations.Validation;
import com.opensymphony.xwork2.validator.annotations.Validations;
import com.opensymphony.xwork2.validator.annotations.ValidatorType;
@Validation // 标记为需要数据校验
public class BookAction extends ActionSupport { // 继承自ActionSupport
// 添加书籍页面
@Validations(
requiredStrings = {
@RequiredStringValidator(type = ValidatorType.SIMPLE,
trim=true, fieldName = "book.name", message = "请输入
书籍名称. *"),
@RequiredStringValidator(type = ValidatorType.SIMPLE,
trim=true, fieldName = "book.author", message = "请输
入书籍作者. *")
},
dateRangeFields = {@DateRangeFieldValidator(type = Validator
Type.SIMPLE, fieldName = "book.publishedDate", min =
"1900-01- 01", max = "2200-01-01", message = "日期必须大于
${min} 小于 ${max}, 当前值为 ${book.publishedDate}.")}
)
public String add() {
bookList.add(book);
title = "<br/><br/>添加书籍成功<br/><br/>";
return "success";
}
@SkipValidation // 书籍列表,@SkipValidation跳过校验
public String list() {
return "list";
}
}
[size=medium]该配置与上面的XML配置是等价的。因为只对addBook.action进行校验,因此只在方法add()上添加了@Validations以及校验规则。其他不需要校验的方法需要加上[color=red]@SlipValidation[/color],否则也会被校验。
另外,使用@Validator时Struts 2默认的验证方式是全局验证模式,因此只能配置一种验证方式。如果要对同一个Action的两个方法配置两种不同的验证方式,需要重写Struts 2的默认拦截器。
注意:被校验的Action要继承ActionSupport类,并要在action配置中指定名为input的JSP,因为Struts 2在校验失败后会自动返回input页面。[/size]