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>

注意紅色加粗字體部分。

測試代碼不變,運行可以看到結果。這個東東剛剛看了一點,文中不足之處在所難免。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章