一、自定义验证器
定义:可以选择继承ValidatorSupport类(实现一般验证器)或FieldValidatorSupport类(实现字段验证器)。
配置:默认情况下,Struts2会在类路径根目录下加载validators.xml文件中的验证器。若类路径下没有,则从com.opensymphony.xwork2.validator.validator.validators下加载。
也就是会优先选择我们配置的验证器。
使用:和框架自有验证器相同。
例:自定义18位身份证验证器
IDCardvalidator类
public class IDCardvalidator extends FieldValidatorSupport {
@Override
public void validate(Object object) throws ValidationException {
// 1.获取字段名字和值
String fieldName = getFieldName();
Object value = this.getFieldValue(fieldName, object);
// 2.验证
IDCard idCard=new IDCard();//自定义的验证类,返回boolean值
boolean result=idCard.Verify((String)value);
// 3.验证失败,验证成功
if (!result) {
addFieldError(fieldName, object);
}
}
}
在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">
<!-- START SNIPPET: validators-default -->
<validators>
<validator name="idcard" class="com.hcx.struts2.validation.app.IDCardvalidator"/>
</validators>
<!-- END SNIPPET: validators-default -->
具体Action包下的validator文件使用该验证器
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator 1.0.2//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">
<validators>
<!-- 基于字段的验证 -->
<field name="idCard">
<field-validator type="idcard">
<message>It is not a idCard!</message>
</field-validator>
</field>
</validators>
二、编程验证
struts2中Action继承Validateable接口,就可以实现编程验证。ActionSupport类已经实现了该接口。
@Override
public void validate() {
if(age<10||age>50){
addFieldError("age", "age Error");
}
}