Struts2数据验证
使用Java代码进行数据验证
重写ActionSupport的validate()方法
对Action类的中所有请求处理方法都会进行验证!
对Action类的数据属性进行检查,如果发现错误,通过以下方法向Action添加错误信息:
addActionError(errorMessage) //添加action级别的错误
addFieldError(fieldName, errorMessage) //添加字段级别的错误
addActionMessage(message) //添加action消息
这三个方法实际上是通过ValidationAwareSupport类实现的,ActionSupport实现了ValidationAware接口
添加错误信息后,在页面上可以使用Struts2标签显示出来:
<s:actionerror />
<s:fielderror fieldName="">
<s:actionmessage />
验证Action中的请求处理方法
在Action类中添加void validateXXX()
方法即可针对XXX请求处理方法进行验证
使用XML进行数据验证
概述
这种验证的好处是,不需在Action类中写入大量的if/else/addFieldError代码--非侵入式--保证了业务逻辑代码的干净。同时直接提供了国际化支持。
不但支持xml方式定义规则,还支持使用注解!
推荐使用xml方式
验证规则
验证规则实际上是由xwork提供的,它们定义在struts2-core Jar包中,涉及:
com.opensymphony.xwork2.validator
//验证的核心类
com.opensymphony.xwork2.validator.validators
//除了验证规则实现类外,还有一个default.xml定义验证规则的名字
com.opensymphony.xwork2.validator.annotations
//定义具体的验证注解类
名称 |
参数 |
功能 |
范围 |
required |
不能为null |
field |
|
requiredstring |
trim=true |
不能为null且不能为empty |
field |
stringlength |
trim=true minlength maxlength |
限定字符串长度 |
field |
short int long |
min max |
限定整数的范围 |
field |
double |
minInclusive相当于>= maxInclusive相当于<= minExclusive相当于> maxExclusive相当于< |
限定数字的范围 |
field |
date |
min max |
限定日期范围 值为MM/DD/YYYY格式 |
|
|
限定必须是合法email地址 |
||
url |
限定必须是合法url地址 |
||
creditcard |
验证信用卡号 |
||
fieldexpression |
expression |
使用OGNL表达式进行验证 |
field |
expression |
expression |
使用OGNL表达式进行验证 |
action |
reges |
expression caseSensitive trim |
使用正则表达式进行验证 |
field |
visitor |
context //验证文件名插值 appendPrefix //错误消息前缀 |
Action中的属性是复杂对象,如果希望对这个对象进行特殊验证,则可使用visitor |
field |
注解验证
每个验证规则都有对象的注解,使用注解也可以开启验证,如:
@RegexFieldValidator(trim=true)
自定义验证
概述
如果内置的验证规则不能满足需要,可以自己定义验证规则类。大体上包括以下步骤:
1. 定义一个验证规则类:可以从ValidatorSupport或FieldValidatorSupport继承
2. 注册验证规则类:在类路径下创建validators.xml,添加<validator>配置节
3. 使用自定义的验证规则类:<field-validator type=”自定义验证规则类名”>
定义验证规则类
package com.zhiyou100.video.validator
public class IDCardValidator extends FieldValidatorSupport {
@Override
public void validate(Object object) throws ValidationException {
String fieldName = getFieldName();
Object value = getFieldValue(fieldName, object);
//如果验证时需要多个属性参与,而可以从object中取到更多的值
//还可以创建一个otherFieldName属性,让外界把其它属性名传进来
//验证逻辑
//addFieldError(fieldName, “错误信息”);
}
}