struts2输入校验

struts2 我们可以实现对 action 所有方法 进行校验 或者对 action 指定方法 进行校验。
对于输入校验 struts2 提供了两种实现方法 :
1. 采用手工编写代码实现。
2. 基于 XML 配置方式实现。
 
手工编写代码实现对action中所有方法输入校验
 
通过重写 validate() 方法实现, validate() 方法会校验 action 中所有与 execute 方法签名相同的方法。当某个数据校 验失败时,我们应该调用 addFieldError() 方法往系统的 fieldErrors 添加校验失败信息(为了使用 addFieldError() 法, action 可以继承 ActionSupport ),如果系统的 fieldErrors 包含失败信息, struts2 会将请求转发到名为 input result 。在 input 视图中可以通过 <s:fielderror/> 显示失败信息。
validate() 使用例子:
public void validate () {
       if(this.mobile==null || "".equals(this.mobile.trim())){  this.addFieldError("username", " 手机号不能为空 ");
        }else{  if(!Pattern.compile("^1[358]\\d{9}").matcher(this.mobile.trim()).matches()){
this.addFieldError(“mobile", " 手机号的格式不正确 "); }
       }
}
验证失败后,请求转发至 input 视图:
<result name=" input ">/WEB-INF/page/addUser.jsp</result>
addUser.jsp 页面中使用 <s:fielderror/> 显示失败信息。
 
手工编写代码实现对action指定方法输入校验
 
通过 validateXxx() 方法实现, validateXxx() 只会校验 action 中方法名为 Xxx 的方法。其中 Xxx 的第一个字母要大写。 当某个数据校验失败时,我们应该调用 addFieldError() 方法往系统的 fieldErrors 添加校验失败信息(为了使用 addFieldError() 方法, action 可以继承 ActionSupport ),如果系统的 fieldErrors 包含失败信息, struts2 会将请求 转发到名为 input result 。在 input 视图中可以通过 <s:fielderror/> 显示失败信息。
validateXxx() 方法使用例子:
public String add () throws Exception{  return "success";}
public void validateAdd (){
          if(username==null && "".equals(username.trim()))  this.addFieldError("username", " 用户名不能为空 ");
}
验证失败后,请求转发至 input 视图:
<result name=" input ">/WEB-INF/page/addUser.jsp</result>
addUser.jsp 页面中使用 <s:fielderror/> 显示失败信息。
 
输入校验的流程
 
1 类型转换器对请求参数执行类型转换,并把转换后的值赋给 action 中的属性。
2 如果在执行类型转换的过程中出现异常,系统会将异常信息保存到 ActionContext conversionError 拦截器将异常信息添加到 fieldErrors 里。不管类型转换是否出现异常, 都会进入第 3 步。
3 。系统通过反射技术先调用 action 中的 validateXxx() 方法, Xxx 为方法名。
4 。再调用 action 中的 validate() 方法。
5 经过上面 4 步,如果系统中的 fieldErrors 存在错误信息(即存放错误信息的集合的 size 大于 0) ,系统自动将请求转发至名称为 input 的视图。如果系统中的 fieldErrors 没有任 何错误信息,系统将执行 action 中的处理方法。

猜你喜欢

转载自free0007.iteye.com/blog/1757253