如何使用struts做统一的客户端验证[转载]

         
      表单的客户端验证是常用的技术,比如说验证email是否合法,长度是否符合要求,输入的电话号码等等。而这些验证通常的做法是做成一个通用的javascript,然后在页面中引用进来,但是,这样做有一个不方便,就是假如验证的东西不止或者验证方法改变了则很难修改。下面说说struts的统一的客户端验证方案(注意:服务器端的验证必须使用form中的validate()方法)
1.首先在struts-config.xml中加入
<message-resources parameter="resources.MessageResources"></message-resources>
2.把要显示的错误消息存放在MessageResources.properties文件中,形如:
error.date={0}不是日期类型
properties文件的设置方法见我以前的blog

3.设置validation.xml代码如下,说明方法都在注释里面:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE form-validation PUBLIC
          "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1.3//EN"
          "http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd">

<form-validation>
 <formset>
  <form name="userForm"><!--form中的名字-->
   <!--对应的form中的字段统一的验证方法userId为userForm中的一个字段,其中depends的内容为验证的内容required为必须如入,mask则为正则表达式验证方法-->
   <field property="userId" depends="required,mask">

<!--这里指名用properties文件中对应的key的内容去替换{0}的内容-->
    <arg0 key="message.userId" resource="true"/>
    <var>
     <var-name>mask</var-name>

<!--做正则表达式的验证,该正则表达式的内容为要求输入的内容必须为数字或者字母,有关正则表达式的内容请查阅相关资料-->
     <var-value>^[0-9a-zA-Z_-_]*$</var-value>
    </var>
   </field>
   <field property="sn" depends="required">
    <arg0 key="message.sn" resource="true"/>
   </field>
   <field property="givenname" depends="required">
    <arg0 key="message.givenname" resource="true"/>
   </field>
   <!--<field property="password" depends="required,minlength,maxlength">
    <arg0 key="message.password" resource="true"/>
    <arg1 name="minlength" key="${var:minlength}" resource="false"/>
    <arg1 name="maxlength" key="${var:maxlength}" resource="false"/>

<!--验证输入的密码最少为6位,最多为16位-->
    <var>
     <var-name>minlength</var-name>
     <var-value>6</var-value>
    </var>
    <var>
     <var-name>maxlength</var-name>
     <var-value>16</var-value>
       </var>
   </field>
   -->

<!--验证输入的内容是否为合法的email-->
   <field property="email" depends="required,email">
    <arg0 key="message.email" resource="true"/>
   </field>
   <field property="mobileNumber" depends="mask">
    <arg0 key="message.mobileNumber" resource="true"/>
    <var><!--验证移动电话号码必须为数字-->
     <var-name>mask</var-name>
     <var-value>^[0-9]*$</var-value>
    </var>
   </field>
   
  </form>
  <form name="GroupsManageGroupsForm">
   <field property="userName" depends="required">
    <arg0 key="title.groupName" resource="true"/>
   </field>
  </form>
  <form name="DepartmentManageForm">
   <field property="departmentId" depends="required">
    <arg0 key="title.departCode" resource="true"/>
   </field>
   <field property="departmentName" depends="required">
    <arg0 key="title.departName" resource="true"/>
   </field>
  </form>
  <form name="LogsForm">
   <field property="startTime" depends="date">
    <arg0 key="message.startTime" resource="true"/>
    <var>
                       <var-name>datePatternStrict</var-name>

<!--验证输入的日期必须为YYYY-MM-DD格式-->
                       <var-value>yyyy-MM-dd</var-value>
                </var>    
   </field>
   <field property="endTime" depends="date">
    <arg0 key="message.endTime" resource="true"/>
    <var>
                       <var-name>datePatternStrict</var-name>
                       <var-value>yyyy-MM-dd</var-value>
                </var> 
   </field>
  </form>
 </formset>
</form-validation>

这个代码是我实际项目中的一个完整的代码。

4.jsp中的form外面增加如下代码

<html:javascript dynamicJavascript="true" staticJavascript="true" formName="userForm"/>
这句的意思为:为userForm启用javascript验证

同时在form的onsubmit事件中添加return validateUserForm(this)方法。其中名字规则为:validate+form的名字.

总结:这样一来,form在提交的时候就会去做validate.xml指定的验证规则和方法,假如以后验证方法改变了,则只需要修改xml文件就可以了,不必要去做其它的修改,这样提高软件的可维护性,可扩展性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值