数据校验指对客户端提交的数据检查是否合法 .
Struts2数据校验有以下两种方法:
一、在Action类中重写validate()方法(必须继承ActionSupport类)
示例:
LoginAction.java
package cn.iborder.action;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionSupport;import cn.iborder.Service.impl.UsersService;import cn.iborder.entity.Users;import java.util.Map;public class LoginAction extends ActionSupport { Users users = new Users(); ActionContext ac = ActionContext.getContext(); MaprequestMap = ac.getContextMap(); Map sessionMap = ac.getSession(); public Users getUsers() { return users; } public void setUsers(Users users) { this.users = users; } /** * 重写父类ActionSupport中的validate()方法 * 这样是默认验证当前Action类中的所有方法 */ /* @Override public void validate() { // TODO Auto-generated method stub System.out.println("数据校验开始"); if (users.getUsername() == null) { super.addFieldError("username", "用户名不能为空"); } if (users.getPassword() == null) { super.addFieldError("password", "密码不能为空"); } } */ /** * 指定只验证当前Action类中的login()方法 */ public void validateLogin() { System.out.println("数据校验开始"); if (users.getUsername() == null) { super.addFieldError("username", "用户名不能为空"); } if (users.getPassword() == null) { super.addFieldError("password", "密码不能为空"); } } public String login() { System.out.println("调用login()开始"); System.out.println(users.getUsername()); System.out.println(users.getPassword()); Users user = new UsersService().login(this.users); if (user == null) { requestMap.put("error", "用户不存在!!!"); return NONE; } else { sessionMap.put("isLogin", user); return SUCCESS; } } public String logout() { sessionMap.remove("isLogin"); return SUCCESS; }}
二、使用XWork的validator框架(编写xml校验配置文件)
XWork核心jar包中com.opensymphony.xwork2.validator.validators包下的default.xml文件定义了部分常用的校验器。
default.xml
具体应用如下:
1、类型转换检验器:
类型转换错误 true
- fieldName:该参数指定检查是否存在转换异常的字段名称,如果是字段校验,则不用指定该参数。
- repopulateField:该参数指定当类型转换失败后,返回input页面时,类型转换失败的表单是否保留原来的错误输入。true为保留,false为不保留。
2、日期校验器:
1990-01-01 2010-07-28
- min:指定字段日期值的最小值,该参数为可选参数。
- max:指定字段日期值的最大值,该参数为可选参数。
3、浮点数值校验器:
20.1 50.1
- minInclusive|minExclusive:指定字段的最小值,包含该值|不包含该值。
- maxInclusive|maxExclusive:指定字段的最大值, 包含该值|不包含该值。
4、邮件地址校验器:
非法的邮件地址
5、表达式校验器:
....... Failed to meet Ognl Expression...
- expression:该参数为一个逻辑表达式,该参数使用OGNL表达式,并基于值栈计算,返回一个Boolean类型值。
6、字段表达式校验器:
#myGirfriendCreditLimit]]> My credit limit should be MORE than my girlfriend
7、整数校验器:
10 100 年龄必须在在${min}到${max}之间
8、正则表达式校验器:
#myGirfriendCreditLimit]]> My credit limit should be MORE than my girlfriend
- expression:为必选参数,指定匹配有的表达式。
- caseSensitive:指明进行匹配时,是否区分大小写,为可选参数,默认为true。
9、必填校验器:
用户名不能为空
10、必填字符串校验器:
true 用户名不能为空
- trim:可选参数,用于指定是否在校验之前对字符串进行整理,默许为true。
11、字符串长度校验器:
4 10 true
12、网址校验器:
Invalid homepage url
13、visitor校验器:
该校验器名称为:visitor,用来校验Action中定义的复合类型属性,支持简单的复合类型、数组类型、Map等集合类型。
myContext true
struts2配置xml校验文件步骤:
1、创建xml文件(必须和Action类同一路径)
有两种命名规范
- ActionClassName-validation.xml 验证Action类中所有方法
- ActionClassName-ActionName-validation.xml 验证Action类中指定方法
其中ActionName指的是struts.xml中配置的action节点的name值
示例:
LoginAction-validation.xml
用户名不能为空 密码不能为空