struts2中的validate框架使用方法
手动参数校验
自己手动进行前台传递的参数的校验,需要action中复写validate方法,直接在方法中
写自己的逻辑
@Override
public void validate() {
if (user.getUsername() == null
|| user.getUsername().trim().length() == 0) {
// 说明用户名为空
this.addFieldError("username.message", "用户名不能为空");
}
if (user.getPassword() == null
|| user.getPassword().trim().length() == 0) {
this.addFieldError("password.message", "密码不能为空");
}
if (!(user.getAge() >= 10 && user.getAge() <= 40)) {
this.addFieldError("age.message", "年龄必须在10-40之间");
}
// System.out.println("validate......");
}
如果想在这里单独校验某个方法,比如regist方法,可以自己写一个方法,方法名
要写成validateRegist,这样在接受到向该方法传递的参数时会执行此方法,而其他
方法接受参数不会执行该方法
以配置文件方式使用struts2中的校验器
想使用struts2自带校验器,需要在你的需要校验的action的包中新建xml,名称应该是
action类名-validation.xml,例子(注意例子中的约束文档声明):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator 1.0.3//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<!-- 注意这里的xml文件名称,action类名-validation.xml
如果想只对testaction中的regist方法校验,而login不校验 ,应该
将文件名称改为action类名-action名称-validation.xml(注意这里是
action的名称而不是方法名)。还需要注意如果要校验特定方法,struts.xml文件中
必须配置method,也就是不能使用动态方法调用该action方法-->
<!-- 根元素 -->
<validators>
<!-- 子元素,name是属性名称 -->
<field name="username">
<!-- 校验器,type指定校验器,这里是指定username不能为空 -->
<field-validator type="requiredstring">
<!-- 校验器参数,例如这里可以指定校验字符串不去空格,
参数名称要去相应的校验器中找(属性名) -->
<!-- <param name="trim">true</param> -->
<!-- 错误信息 -->
<message>用户名不能为空</message>
</field-validator>
<field-validator type="stringlength">
<param name="maxLength">10</param>
<param name="minLength">6</param>
<message>用户名必须在${minLength}到${maxLength}位</message>
</field-validator>
</field>
<!-- 使用正则 -->
<field name="telphone">
<field-validator type="regex">
<param name="regexExpression"><![CDATA[^135[0-9]{8}$]]></param>
<message>电话号码必须是135xxxxxxxx</message>
</field-validator>
</field>
<!-- 字段OGNL表达式校验器,要求field满足一个ognl表达式,
expression参数指定ognl表达式,
该逻辑表达式基于ValueStack进行求值,
返回true时校验通过,否则不通过 -->
<field name="repassword">
<field-validator type="fieldexpression">
<param name="expression"><![CDATA[(password==repassword)]]></param>
<message>两次密码输入不一致</message>
</field-validator>
</field>
</validators>
如果想配置只校验某一个方法,请看上面配置文件中的注释
自定义校验器方法
想要自定义校验器,需要在class目录中(也就是src)目录中新建validators.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator Definition 1.0//EN"
"http://struts.apache.org/dtds/xwork-validator-definition-1.0.dtd">
<validators>
<!-- 这里的name是在使用时用到的,class是你写的校验器的完整类名 -->
<validator name="age" class="com.wz.validate.MyAgeValidator"></validator>
</validators>
上面文件中的class中的校验器
public class MyAgeValidator extends FieldValidatorSupport{
@Override
public void validate(Object object) throws ValidationException {
//这里的 Object就是需要被校验的对象
//首先获取字段的名称 age
String fieldName=this.getFieldName();
//获取字段的值
Object fieldValue=this.getFieldValue(fieldName, object);
//判断年龄是否为整数
if(fieldValue instanceof Integer) {
int age = (Integer) fieldValue;
//判断年龄是否为负数
if(age<0){
//根据xml配置,将配置中的错误信息加入到FieldErrors中,给页面显示
this.addFieldError(fieldName, object);
}
}
}
}
然后就可以和使用自带校验器一样,在action-validation.xml中进行配置了