Valang Validator学习实例入门

  Valang Validator 是较为新颖的插件,在参考胡键《Valang Validator攻略》一文以及官方指导文章后将自己将学习Valang Validator的一个完整实例写下,希望对大家有所帮助。对于Valang Validator的介绍可以参考本博客内的转帖《Valang Validator攻略》,这里介绍一个实例,不对Valang Validator本身做过多介绍。

第一部:建立需要验证类

public class User {

    private String name, psw;

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

    public String getName() {return name;}

    public void setPsw(String s) {psw = s;}

    public String getPsw() { return psw;}

}

第二步:建立UserValidator类,

package org.peng.myValang2;

 

import org.springframework.validation.Errors;

import org.springmodules.validation.valang.ValangValidator;

 

public class UserValidator extends ValangValidator  {

    public void validate(Object o,Errors e){

       super.validate(o,e);//这里可以有更多内容,为了简化将直接调用验证函数验证规则在第三步中给出

    }

}

第三步:建立user.xml文件,在这个文件中定义一个

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd" >

<beans>

<bean id="userValidator" class="org.peng.myValang2.UserValidator">

    <property name="valang">

       <value>

           <![CDATA[

           { name : ? is not null and ? has text and length(?)<= 8 : 'Name is empty or too long.'}

           { psw : ? has text and length(?)<= 4 : 'password is null or too long'}   

           ]]>

       </value>

    </property>  

</bean>

</beans>

说明,验证规则如下:

Name:不空,长度小于等于8

Psw:不空长度小于等于4

第四部:建立测试类UserTest

import junit.framework.TestCase;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import org.springframework.validation.BindException;

import org.springframework.validation.FieldError;

public class UserTestextends TestCase {

    public void testValidation() {

       User user = new User();

       user.setName("peng");

       user.setPsw("340711");

       ApplicationContext ctx = new ClassPathXmlApplicationContext("/user.xml");

       UserValidator test = (UserValidator) ctx.getBean("userValidator");

       BindException errors= new BindException(user, "target");

       test.validate(user, errors);

       for (Object obj : errors.getAllErrors()){

           System.out.println(((FieldError)obj).getDefaultMessage());

       }

    }

}

最后,运行测试用例即可。

下面我们进入更高级的部分:自定义函数。自定义需要继承Valang Validator 包的AbstractFunction函数,这里我建立一个测试字符串长度函数。

函数类的定义如下:

import org.springmodules.validation.valang.functions.AbstractFunction;

import org.springmodules.validation.valang.functions.Function;

public class AnotherLengthFunction extends AbstractFunction  {

    public AnotherLengthFunction(Function[] arg0, int arg1, int arg2) {

       super(arg0, arg1, arg2);//这部分是默认设置

       definedExactNumberOfArguments(1);

    }

    @Override

    protected Object doGetResult(Object arg0) throws Exception {

        String value= getArguments()[0].getResult(arg0).toString();

        return new Integer(value.length());//这里实现你的自定义函数

    }

}

然后重新配置user.xml文件,如下:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd" >

<beans>

<bean id="userValidator" class="org.peng.myValang2.UserValidator">

  <property name="customFunctions">

    <map>

        <entry key="anotherLength">

            <value>org.peng.myValang2.AnotherLengthFunction</value>

        </entry>

    </map>

  </property>

    <property name="valang">

       <value>

           <![CDATA[

           { name : ? is not null and ? has text and anotherLength(?)<= 8 : 'Name is empty or too long.'}

           { psw : ? has text and anotherLength(?)<= 4 : password is empty or too long.'}         

           ]]>

       </value>

    </property>  

</bean>

</beans>

注意红色加粗字体部分。

测试代码不变,运行可以看到结果。这个东东刚刚看了一点,文中不足之处在所难免。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值