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>
注意红色加粗字体部分。
测试代码不变,运行可以看到结果。这个东东刚刚看了一点,文中不足之处在所难免。