在实际的开发当中,我们需要对请求参数进行校验。校验又分为前台校验和后台校验,所谓的前台校验就是在页面上编写JS校验。而后台校验则需要用到java代码。而struts2框架给我们提供了手动校验和配置校验。我们来谈谈什么是手动校验。
1. 手动校验前提
手动校验则要求action类实现Validateable和ValidationAware接口。一般来讲,我们让action继承ActionSupport就行了。因为ActionSupport它实现了这两个接口,然后再在action类中对validate这个方法进行重写。
2. 手动校验原理
;在拦截器组中有一个拦截器叫params,这个拦截器是负责将请求参数进行封装的。在这个拦截器下面有个拦截器叫validation,因为params将数据进行封装完了,所以validation会在访问action之前调用validate这个方法,在这个方法中对请求参数进行校验。如果valication拦截器向action中存储了错误信息,那么拦截器workflow就会拦截请求,同时转跳到input视图。
3. 在validate方法中如何存储错误信息?
@Override
public void validate() {
// 说明用户名为空
if (user.getUsername() == null
|| user.getUsername().trim().length() == 0) {
//调用addFieldError这个方法来进行存储错误信息的。
this.addFieldError("username.message", "用户名不能为空");
}
if (user.getPassword() == null
|| user.getPassword().trim().length() == 0) {
this.addFieldError("password.message", "密码不能为空");
}
}
4. 如何在input视图上获取错误信息的?
在input视图上添加struts2标签库。<%@taglib prefix="s" uri="/struts-tags"%>
然后在在JSP页面上直接调用标签库就行了。
<s:fielderror> 展示所有错误信息
<s:fielderror fieldName="XXX">展示特定名称(XXX)的错误信息.
5. 在同一个action类中,并不是所有的请求参数都需要进行校验如何解决?
我们可以创建一个名称叫 validate+请求处理方法名 例如:请求处理方法叫 regist() 校验 的方法名 validateRegist().这样就会先运行指定方法,然后再执行validate的方法。将要对数据进行统一处理的过程放在validate方法中。