Struts2-编写自己的验证器

编写自己的验证器首先要实现Validator接口,它是com.opensymphony.xwork2.validator包的一部分。

Validator包的定义如下:

import com.opensymphony.xwork2.validator.ValidationException;
import com.opensymphony.xwork2.validator.ValidatorContext;

public interface Validator {
	void setDefaultMessage(String message);
	String getDefaultMessage();
	String getMessage(Object object);
	void setMessage(String key);
	String getMessageKey();
	void setValidatorType(String type);
	String getValidatorType();
	void setVallidatorContext(ValidatorContext validatorContext);
	ValidatorContext getValidatorContext();
	void validate(Object object) throws ValidationException;
	
}


Validation拦截器负责加载执行各种验证程序。从上述源码中,可以知道在validation拦截器中加载一个验证程序后,这个拦截器将调用那个验证程序的setValidatorContext方法,并把当前的ValidatorContext对象传递给它,这样我们可以访问当前动作。接下来,Validation拦截器将调用validate方法并把需要验证的对象传递给他。validate方法是编写一个自定义的验证程序需要覆盖的方法。

对便捷类ValidatorSupport或FieldValidatorSupport进行扩展要比自行实现Validator接口容易的多。如果要创建一个普通的验证程序,就扩展ValidatorSupport类,如果要编写一个字段验证程序,就要扩展FieldValidatorSupport类。

如果要设计的验证程序能够接受一个输入参数,需要为这个参数增加一个相应的属性,例如,如果验证程序允许一个minValue参数,还需要增加一个名为minValue的属性,并未它编写getter,setter方法。

2.ValidatorSupport类

在ValidatorSupport类中增加了几个方法:

1)protected java.lang.Object getFieldValue(java.lang.String name,java.lang.Object object) throws ValidationException;

作用:它返回Object对象的name字段的值

2)protected void addActionError(java.lang.Object actionError):这个方法的主要功能是增加一个动作错误信息。

3)protected void addFieldError(java.lanlg.String propertyName,java.lang.Object object):这个方法的主要功能是增加一个字段错误信息。

3.RequiredStringValidator类

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

public class RequiredStringValidator  extends FieldValidatorSupport{
	private boolean doTrim=true;

	public boolean isTrim() {
		return doTrim;
	}

	public void setTrim(boolean doTrim) {
		this.doTrim = doTrim;
	}
	public void validate(Object object) throws ValidationException{
		String fieldName=getFieldName();
		Object value=this.getFieldValue(fieldName, object);
		if(!(value instanceof String)){
			addFieldError(fieldName,object);
		}else{
			String s=(String)value;
			if(doTrim){
				s=s.trim();
			}
			if(s.length()==0){
				addFieldError(fieldName,object);
			}
		}
	}
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值