1.对Action中所有方法进行输入校验
举个例子对用户名和手机号码进行输入校验
a.<%@ taglib uri="/struts-tags" prefix="s" %>
<s:fielderror/> //显示错误信息
<form action="${pageContext.request.contextPath}/命名空间/action名称_需校验的方
法.action" method="post">
姓名:<input type="text" name="username"><br/>
手机号:<input type="text" name="mobile"><br/>
<input type="submit" value="提交">
</form>
b.新建一校验类并继承类ActionSupport,并重写validate()方法,它会校验action中所有与execute方法
签名相同的方法,当某个数据校验失败时,我们应该调用addFieldError()方法,如果系统的fieldErrors
包含失败信息,struts2会将请求转发到名为input的result,在input视图中可以通过<s:fielderror/>显
示错误信息
validate方法例子
public void validate() {
if(this.username == null || "".equals(this.username.trim())) {
this.addFieldError("username", "用户名不能为空");
}if(this.mobile == null || "".equals(this.mobile.trim())) {
this.addFieldError("mobile", "手机号不能为空");
}else {
if(!Pattern.compile("^1[358]//d{9}$").matcher(this.mobile).matches
()) {
this.addFieldError("mobile", "手机号格式不正常");
}
}
}
其中Pattern为正则表达式类,^1[358]//d{9}$表示的含义为输入的手机号码必须1为第一位,第二位是
3,5,8其中一位,后面还应该有9位
c.如果只需对Action中某一个方法进行校验,举个例子如果对add()方法进行校验只需将validate()改为
validateAdd()则可实现指定校验
2.采用手工编写代码实现输入校验流程
a.类型转换器对请求参数执行类型转换,并把转换后的值赋给action的属性
b.如果在执行类型转换过程中出现异常,系统将异常信息保存到ActionContext,conversionError拦截器
将异常信息封装到fieldErrors里,不管类型转换出现异常,都会进入第三步
c.系统通过反射技术先调用action中的validateXxx()方法,Xxx为方法名
d.再调用action中的validate()方法
e.经过以上四步,如果系统中的fileErrors存在错误信息,系统自动将请求发送到名称为input的视图,
如果系统中的fileErrors不存在错误信息,系统将执行action的处理方法
3.进入input视图可能是因为类型转换失败或者是校验失败