25.struts2_自定义验证器和编程验证

本文介绍如何在Struts2框架中实现自定义验证器和编程验证。首先通过继承FieldValidatorSupport类创建一个18位身份证号码验证器,并详细说明了其配置及使用方法。此外,还介绍了如何通过实现Validateable接口来进行编程验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、自定义验证器

定义:可以选择继承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");
		}
	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值