struts2可以对anction中所有方法进行校验,也可以对指定方法进行校验,现在我们来说说采用手工编码代码方式来进行校验
1 编写action,重写validate方法,validate会校验所有的方法,当校验出错,把错误信息放到filedError中。
public class PersonAction extends ActionSupport {
private String userName;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
@Override //校验所有方法
public void validate() {
System.out.println("validate");
if(userName==null||"".equals(userName.trim())){
this.addFieldError("userName" , "用户名不能为空");
}
}
//校验update方法
public void validateUpdate(){
System.out.println("validateUpdate");
if(userName==null||"".equals(userName.trim())){
this.addFieldError("userName" , "用户名不能为空");
}
}
public void update(){
System.out.println("update");
ActionContext.getContext().put("message","update");
}
@Override
public String execute() throws Exception {
System.out.println("execute");
return this.SUCCESS;
}
}
2 当在页面输入用户名,会经过先经过validate方法校验,校验通过才会进入execute方法,记住校验失败把错误信息放入到addFieldError方法中,才不会继续执行下去,validate会校验所有方法。
3 如果要校验部分方法,则校验方法名称就不是validate,而是validateXxx,Xxx是actiion中的方法名.如果两个都有则是先校验部分方法,再校验所有方法。校验失败,struts2就会将请求转发到名为input的result中去。<s:fielderror/>会输出存入的校验失败信息
输入校验流程
1 类型转换器对请求参数执行类型转换,并把转换后的值复制给action属性
2 如果在执行类型转换过程中出现异常,系统将异常信息保存到ActionContext中,拦截器将异常信息添加到filedErrors里,不管类型转换是否出现异常,都进入步骤3
3 调用validateXxx方法,部分方法校验
4 调用 validate方法,全部方法校验
5 经过以上,如果filedErrors存在错误信息,转发input的result,如果没有就执行action中的方法