以前一直没有用过struts的validation框架,今天试了一下。
测试环境:
tomcat6 ,jdk1.5,IE7 ,Firefox3
需要的文件
validator-rules.xml(myeclipse 生成,或者在网上下载)
validation.xml(自己添加)
ApplicationResources.properties(struts自身的资源文件)
包
commons-validator.jar(validation需要)
jakarta-oro.jar(validation需要)
struts.jar
(client)javascript验证步骤:
1 通过myeclipse插件,添加了struts的代码,自动在WEB-INF有validator-rules.xml文件
。validator-rules.xml文件当中包含了所有一般的验证代码。(一般情况下不用修改)
2 编写validation.xml
?
?<form-validation> ????<arg1 key="${var:maxlength}" name="maxlength" <br="">?????resource="false" />
|
??注意如果:lib中存在commons-digester.jar的话,需要注意validator-rules.xml和validation.xml的DTD
?我这里用的是struts1.2.9,DTD是validator_1_1_3.dtd
? ? ????????? "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1.3//EN" ????????? " http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd "> |
3 编写ApplicationResources.properties文件
? 添加
? # Struts Validator Error Messages ?? errors.required={0} is required. ?? errors.minlength={0} can not be less than {1} characters. ?? errors.maxlength={0} can not be greater than {1} characters. ?# custom Validator parameter ?? userForm.userName = username ?? userForm.userPassword = password |
?4 在对应的XXX.jsp
? 添加
? a:
? ?自动生成对应的javascript代码
? b:????onsubmit="return validateUserForm(this)">
? onsubmit="return validateUserForm(this)"
??????? 添加的是验证form的代码
?
根据这些步骤网上的前辈都说可以调试通过。但是我经过的我的测试发现
struts1.1 ,和struts1.2都存在相同的问题
这里用IE7+Compasion JS+ms debugger或者是Firefox3+Venkman调试
错误点1:
在调用oRequired = eval('new '+formValue+'_required()');出现出错
在Venkman中查看formValue变量。天啊,居然有变量后面有个空格。
反编译commons-validator,查看commons-validatororgapachecommonsvalidatorjavascript源码
js中添加下列函数
?function trim(s) { ??????? return s.replace( /^s*/, "" ).replace( /s*$/, "" ); ??? } oRequired = eval('new '+formValue+'_required()')改为 |
?
错误点2:
XXX_required () {...}居然又有空格。
反编译struts.jar,查看strutsorgapachestruts aglibhtmlJavascriptValidatorTag
修改append(" () { ")为append("(){ ")
最后重新将这两个东西进行jar打包,测试通过。