在
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
中的处理方法。