`
rickycm
  • 浏览: 69160 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用Common validator进行服务器、客户端双重验证

    博客分类:
  • java
阅读更多
验证基础准备:

选用common-validator 组件最初的原动力是他可以方便的实现客户端和服务器端的双重校验,而且从Spring-module 0.5发布后,对common-validator提供了良好的支持。

现在就让我们来看看如何在Spring环境下进行方便的双重校验吧J

首先请下载Spring-module0.5和Common-validator组件包放在lib下(我这里使用的是commons-validator-1.3.0.jar和spring-modules-validation.jarßspring-module0.5里的包)。其次,我们要开始进行配置啦,首先配置一个validator,配置如下:

<bean id="validatorFactory"

        class="org.springmodules.validation.commons.DefaultValidatorFactory">

       <property name="validationConfigLocations">

           <list>

              <value>

                  classpath*:configure/validator/validator-rules.xml

              </value>

               <value>classpath*:configure/validator/validation.xml</value>

           </list>

       </property>

    </bean>

  

    <bean id="validator"

        class="org.springmodules.validation.commons.DefaultBeanValidator">

       <property name="validatorFactory" ref="validatorFactory" />

    </bean>

当然,上面要注意的一点是validator-rules.xml和validation.xml。validator-rules.xml我们可以直接引用Struts验证框架里的validator-rules.xml,这个文件很容易就Copy到了,而validation.xml是我们所要自定义的,这里我给出一个很简单的例子:

<form name="tYxs">

           <field property="password" depends="required,mask">

              <arg0 key=" tYxs.password" />

              <var>

                  <var-name>mask</var-name>

                  <var-value>^[0-9a-zA-Z]*$</var-value>

              </var>

           </field>

           </field>

    </form>

上面的文件指定了一个form名字为newuserform,其中包含了一个字段password,规则是不可为空和不能有除1-9,a-z以外的其他字符(熟悉Struts校验的人不计其数,这个也是一样的规则配置方法),多说一句,userForm.password为国际化资源,在介绍国际化的文章中讨论了J

使用Spring MVC进行表单提交的时候,SimpleFormControllor会默认调用Validator,我们使用的还是Spring提供的老方法,注入就可以了。下面给出一个SimpleFormControllor的简单配置方法:

<bean id="tYxsbController"

       class="mtn.gfkd.manage.controller.TYxsbController">

       <property name="tyxsbdao">

           <ref bean="tyxsbdao"/>

       </property>

       <property name="validator">

       <ref bean="validator"/>

       </property>

       <property name="commandName" value="tYxs" />

              <property name="commandClass" value="mtn.gfkd.manage.model.TYxs" />

       <property name="formView">

<!--  tiles标记-- >

           <value>manage.yxsb.insert</value>

       </property>

       <property name="successView">

           <value>manage.yxsb.index</value>

       </property>

    </bean>

如上面的配置所示,我们将Validator和Form bean声明在了控制器中,这样它会在数据进行绑定后进行校验。这里有一个需要注意的问题,直接使用Spring-module的DefaultBeanValidator有一个规范,不然会出现Validator [org.springmodules.validation.commons.DefaultBeanValidator@1db8a73] does not support command class 这个莫名其妙的错误,呵呵,这个一般是我们没有遵守它的命名规范,他的命名规范是你的commandClass的首字母必须改为小写,比如你的类名为TYxs,在validator.xml文件里的form名字必须声明为tYxs,这个问题为查Spring源码n次发现的bug阿,这个命名规则同时也影响到了commandName的设置了。

服务器端的校验我们就配置完成了,现在我们所要关注的就是客户端怎样生成JS校验了。

JSP文件我们所要做的工作很简单了,就是如下:

<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator"%>

<validator:javascript dynamicJavascript="false" formName="tYxs" staticJavascript="false" />

把如上代码放在对应的JSP文件中,呵呵,当然你的formName要和validator.xml里的名字设置成一样的就好了,这样在页面就会自动生成校验的javascript了。

最后要注意的就是怎样写form了,直接给出例子吧:

<form action="insertUser.htm" method="POST" enctype="multipart/form-data"  name="newuserform"  onSubmit="return validateTYxs(this)">

<spring:bind path=" tYxs.password">

                           <FONT color="red">

                           <B><c:out value="${status.errorMessage}"/></B>                              </FONT><input type="text" name="password " value="<c:out value="${status.value}"/>"/>

                     </spring:bind>

</form>

上面也是一个比较完整的使用Spring:bind 标签的例子,给出了校验错误信息,其中注意,生成的Javascript代码的校验函数名是form名字前加上validate,同时把首字母再换成大写。

恩,这样spring的校验就应用在客户端和服务器端了J
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics