WebWork2.0 里的Stringlength验证

 这是Webwork2.0中类FieldValidatorSupport中对字段进行验证validate的方法代码:

public   void  validate(Object object)  throws  ValidationException  {
        String fieldName 
= getFieldName();
        String val 
= (String) getFieldValue(fieldName, object);

        
if (val == null || val.length() <= 0{
            
// use a required validator for these
            return;
        }

        
if (doTrim) {
            val 
= val.trim();
            
if (val.length() <= 0
                
// use a required validator
                return;
            }

        }


        
if ((minLength > -1&& (val.length() < minLength)) {
            addFieldError(fieldName, object);
        }
 else if ((maxLength > -1&& (val.length() > maxLength)) {
            addFieldError(fieldName, object);
        }

    }

 

从代码中可以看出,当被验证字段为null或其length<=0时,就不对其进行长度验证了。

这里是为什么呢??是不是其字段为null或其length<=0时验证留在别的地方验证了呢?答案是肯定的,请看类RequiredStringValidator和类RequiredFieldValidator中的validate方法

RequiredStringValidator中的validate方法:

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);
            }

        }

    }
2.RequiredFieldValidator中的validate方法
public   void  validate(Object object)  throws  ValidationException  {
        String fieldName 
= getFieldName();
        Object value 
= this.getFieldValue(fieldName, object);

        
if (value == null{
            addFieldError(fieldName, object);
        }

    }

在代码中大家可以看到这三个方法各司其职而且互不影响,举个例子吧:

如何你有一个action类中如此写:

public   class  Hello  extends  ActionSupport  {
    
private String name=null;
    
public String execute() throws Exception {
        
// TODO Auto-generated method stub
        return SUCCESS;
    }


    
public void setName(String n){
        name 
= n;
    }

    
    
public String getName(){
        
return name;
    }

}
然后你在Hello-validation.xml中对字段name进行验证:
<! DOCTYPE validators PUBLIC
 "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
  "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"
>
< validators >
    
< field  name ="name" >
        
< field-validator  type ="required"  short-circuit ="false" >
            
< message > Name is required! </ message >
        
</ field-validator >
        
< field-validator  type ="requiredstring"  short-circuit ="false" >
            
< message > Please enter the name! </ message >
        
</ field-validator >
        
< field-validator  type ="stringlength" >
            
< param  name ="minLength" > 5 </ param >
            
< param  name ="maxLength" > 8 </ param >
            
< message > The length of name is between ${minLength} and ${maxLength}. </ message >
        
</ field-validator >
    
</ field >
</ validators >

这时候当Hellow这个Action被引用的时候,WebWork的验证机制就会根据你的配置文件对name字段进行验证,在本例中name初始为null,所以这时候只有required和requiredstring对其进行完整的验证,也就是说这时候你会得到的验证信息为:Name is required! Please enter the name!

而如果你就Hello类中name字段设一个初始值(name="a"),那么这时候required和requiredstring就不会对其进行完整的验证了,相反stringlength会对其进行完整的验证,这时候你得到的验证信息为:The length of name is between 5 and 8.

这就是这个三个验证方式相互协作的方式!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值