如何使用struts做统一的客户端验证
2008-12-18 13:04
302 查看
表单的客户端验证是常用的技术,比如说验证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文件就可以了,不必要去做其它的修改,这样提高软件的可维护性,可扩展性。
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文件就可以了,不必要去做其它的修改,这样提高软件的可维护性,可扩展性。
相关文章推荐
- 如何使用struts做统一的客户端验证[转载]
- 使用js脚本如何进行客户端验证时出现乱码怎么办?
- 详解如何使用jquery插件jQuery.Validate实现客户端验证
- 在usercontrol中如何使用验证控件CustomValidator 中的客户端验证
- asp.ne如何使用javascript去验证客户端信息,如果验证成功则送往服务器端处理,否则在客户端提示用户(不返回到服务器端处理)
- 如何使用智能卡登录VMware Horizon View之三--客户端配置及验证
- 使用js脚本如何进行客户端验证时出现乱码怎么办?
- Struts中如何基于validation.xml来启用客户端验证?
- 如何在 ubuntu 下使用 iNode 客户端
- 使用jQuery.Validate进行客户端验证
- [jQuery]使用jQuery.Validate进行客户端验证——不使用微软验证控件的理由-目录及简介
- 如何使用ssh_scan远程验证SSH服务的配置和策略
- 在ssh2整合框架中,客户端使用jquery validate ajax验证用户名是否重复时,出现问题。 请指教!
- 如何使用Struts 2防止表单重复提交?
- 客户端使用Ajax访问struts2 , struts2如何返回一个json数据!json-lib与flexjson
- [jQuery]使用jQuery.Validate进行客户端验证(高级篇-下)——不使用微软验证控件的理由
- 使用PHP处理数据库数据如何将数据返回客户端并显示当前状态
- 如何使用live writer客户端来发布CSDN的博客文章?
- struts action使用ajax验证用户名是否有被注册
- 如何使用live writer客户端来发布CSDN的博客文章