Struts2数据验证与使用Java代码进行数据验证

时间:2021-05-21 05:22:39

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

限定必须是合法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, “错误信息”);

}

}