第一部:建立需要驗證類
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>
注意紅色加粗字體部分。
測試代碼不變,運行可以看到結果。這個東東剛剛看了一點,文中不足之處在所難免。