011——Struts2的验证框架

本文介绍如何在Struts2框架中实现自定义验证器,包括创建自定义验证器类ChineseValidator,配置验证规则,并在表单中使用这些规则进行用户输入验证。

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

自定义验证器示例:

在src下仿造default.xml的声明方式创建一个*.xml

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE validators PUBLIC
	"-//OpenSymphony Group//XWork Validator Config 1.0//EN"
	"http://www.opensymphony.com/xwork/xwork-validator-config-1.0.dtd">
<validators>
	<validator name="chinese" class="com.java.struts2.action.ChineseValidator" />
</validators>
引用自定义框架

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE validators PUBLIC
	"-//OpenSymphony Group//XWork Validator 1.0//EN"
	"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>

	<field	name="user.account">
		<field-validator type="chinese">
			<param name="mode">none</param>
			<message>用户账号,只能输入非中文的字符</message>
		</field-validator>
	</field>
	
	<field	name="user.username">
		<field-validator type="requiredstring">
			<message>请输入姓名</message>
		</field-validator>
	</field>
	
	<field	name="user.age">
		<field-validator type="int">
			<param name="min">18</param>
			<message>年龄必须在18岁以上</message>
		</field-validator>
	</field>

</validators>
实现自定义验证器

package com.java.struts2.action;

import com.opensymphony.xwork2.validator.ValidationException;
import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport;

public class ChineseValidator extends FieldValidatorSupport {
	
	/**
	 * 表示是否包含有中文。现在有3种模式
	 * none没有中文字符
	 * some含有中文字符,默认值
	 * all全是中文字符
	 */
	private String mode = "some";

	public void setMode(String mode) {
		this.mode = mode;
	}

	public void validate(Object object) throws ValidationException {
		//获取字段名
		final String fieldName = this.getFieldName();
		//获取字段值
		final String fieldValue = (String) this.getFieldValue(fieldName, object);
		//字节数
		final int bytes = fieldValue.getBytes().length;
		//字符数
		final int chars = fieldValue.length();
		
		if(mode.equals("none")) {
			//现在要求全是非中文字符,所以字节数和字符数必须相等
			if(chars != bytes) {
				this.addFieldError(fieldName, object);
			} else if(mode.equals("some")) {
				//现在要求包含有中文字符,所以字节数和字符数不相等
				//另外如果字节数是字符数的两倍,表示全是中文字符,也出错
				if(chars==bytes || chars*2==bytes) {
					this.addFieldError(fieldName, object);
				}
			} else if(mode.equals("all")) {
				//现在要求全是中文,所以字节数应该是字符数的两倍,否则出错
				if(chars*2 != bytes) {
					this.addFieldError(fieldName, object);
				}
			}
		}
	}

}

表单:

<span style="white-space:pre">	</span><s:form action="login" method="post">
		<s:textfield name="user.account" label="账号" />
		<s:textfield name="user.username" label="姓名" />
		<s:textfield name="user.age" label="年龄" />
		<s:submit value="注册" />
	</s:form>




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值