详解Struts中Validator验证框架的使用

转载 2011年04月12日 23:32:00

 

Validator框架以成为Jakarta的公共项目的一部分,可以从http://jakarta.apache.org/commons/下载单独的Validator框架,在Struts中已经带了这个框架。

Validator主要依赖两个jar包

Jakarta-oro.jar:-提供一组处理文本的类,具有文本替换、过滤、和分割功能。

Commons-validator.jar:提供了一个简单、可扩展的验证框架,包含了通用的验证方法和验证规则。

在用Struts中用这个框架,需加入这两个包,用起来感觉还不错。

下面介绍一下。

Validator采用基于两个xml文件的方式来配置验证规则,分别为validation.xml,validator-rules.xml。在struts应用中,需放到web-inf目录下。

1.validator-rules.xml

这个文件包含了一组验证规则,对所有struts应用都适用。一般情况不用修改这个文件,除非要修改或扩展默认规则。如果要给应放到另一个xml文件中,而不是直接添加到validator-rules.xml文件中,这样当Validator升级时,不用修改validator-rules.xml文件。

2.validator.xml文件

这个文件是针对于具体struts应用的,他可以为应用中的ActionForm配置验证规则。而不用编码实现验证。

例如一个验证登陆form的例子,要求用户名必须填写,秘密要求必填、最大、最小长度及其内容的要求。

代码

 

<form-validation>   
    <global>   
        <!-- 密码由数字、26个英文字母或者下划线组成的字符串  -->   
        <constant>   
            <constant-name>pwd</constant-name>   
            <onstant-value>^/w+$</onstant-value>   
        </constant>   
    </global>   
    <formset>   
        <form name="loginForm">   
            <!-- 这里的用户名使用邮箱,验证时使用正则表达式进行验证 -->   
            <field property="user.userId" depends="required">   
                <arg0 key="user.userId" />   
            </field>   
            <field property="user.userPwd" depends="required,minlength,maxlength,mask">   
                <!-- msg name="mask" key="errors.invalid" /-->   
                <arg0 key="user.userPwd" />   
                <arg1 name="minlength" key="${var:minlength}" resource="false" />   
                <arg2 name="maxlength" key="${var:maxlength}" resource="false" />   
                <var>   
                    <var-name>mask</var-name>   
                    <var-value>^/w+$</var-value>   
                </var>   
                <var>   
                    <var-name>minlength</var-name>   
                    <var-value>6</var-value>   
                </var>   
                <var>   
                    <var-name>maxlength</var-name>   
                    <var-value>20</var-value>   
                </var>   
            </field>   
        </form>   
    </formset>   
</form-validation>

validator.xml和validator-rules.xml文件的语法不在这里说明。

3.Validator插件

为了在struts中用validator,可以用插件方式加载Validator框架,需在struts配置文件中配置ValidatorPlugIn插件,同时写明两个xml文件的路径。

应用启动时,Strust会加载这个插件,并调用他的init()方法,init()方法根据pathnames加载

相应的validator-xml,validator.xml文件,把验证信息读入到内存中。

代码

 

<plug-in className="org.apache.struts.validator.ValidatorPlugIn">   
        <set-property   value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"   
            property="pathnames" />   
  </plug-in>

4.Validator和ActionForm

Validator框架不能直接org.apache.struts.action.ActionForm。应采用ActionForm的两个子类

ValidatorActionForm和ValidatorForm

DynaValidatorActionFrom继续自DynaValidatorForm

支持动态在ActionFrom中使用Validator框架

ValidatorFormActionForm继承ValidatorForm

支持在标准ActionForm中使用Validator框架。

DynaValidtaorForom和ValidatorForm类都实现了validator()方法,如果验证失败,就会返回包含错误消息的ActionMessage对象,并把该对象添加到ActionErrors集合对象中,由validator方法最后返回ActionErrors对象。

ValidatorForm有一个子类ValidatorActionForm

ValidatorForm

Strust配置文件的元素的name属------>validator.xml文件

元素的name属性

ValidatorActionForm

Strust配置文件的元素的path属------>validator.xml文件

元素的name属性

Validator框架提供这两个类目的在于可以更加精确的控制执行验证的条件。

例如

loginForm表单对应两个验证规则A、B。对应login、cancel两个动作。

如果对于这两个动作都要执行规则A、B。则可以扩展一个ValidatorFom类loginForm然后配置

代码

 

<formset>   
<form name=”loginForm”>   
    验证规则A    
    验证规则B    
.</form>   
….    
</formset>

如果对于用户的login动作,执行规则A。对于cancel动作执行B规则。则可以扩展一个ValidatorActionFom类

loginForm

然后配置

代码

 

<formset>   
<form name=”login”>   
    验证规则A    
.</form>   
<form name=”cancel”>   
    验证规则B    
.</form>     
</formset>

而DynaValidatorForm和DynaValidatorActionForm,区别和ValidatorFrom和ValidatorActionForm的区别一样

5.在validator框架中使用JavaScript

默认情况下,validator框架在服务器端执行表单验证。也可以在客户端验证。

如果在客户端验证,需要使用struts的标签,他能在jsp页面中生成用于客户端验证

的JavaScript的脚本。

1) 在validator-rules.xml文件的元素中配置元素默认struts框架的validator-rules.xml文件已经包含了javascript子元素。也可以将这些javascript集中放到一个validator.js的文件中,也页面中引入代码

< script language="Javascript1.1" src="js/validator.js">< /script>

2) 在Jsp页面中包含< html:javascript>

< html:javascript formName=”loginForm”> 这个标签的form的name属性制定需要验证的表单名字,

他能够访问为表单配置的验证规则的javascript元素,把包含的脚本写到jsp页面中,生成validateLoginForm的函数,负责执行验证逻辑

3) 对需要验证的表单定义onsubmit事件

4)代码

< html:form action="manageContract.do" onsubmit="return validateContractForm(this);">

5) 用户在表单上提交后,就会调用

标签生成的js脚本validateLoginForm函数,执行验证。如果验证失败,就会弹出对话框提示,

不会提交的服务器端。

小结

使用步骤

1) 创建扩展ValidatorForm或ValidatorActionForm类的ActionForm,如果使用动态ActionForm,

则不用扩展DynaValidatorForm或DynaValidatorActionForm类的子类,可以直接进行第二步

2) 在struts文件中配置form和action元素

3) 把validator框架使用的文本信息添加到应用的Resource Bundle中

4) 代码

< message-resources parameter="com.web.ApplicationResources" />

5) 在validatorxml文件中为表单配置验证规则

6) 在struts配置文件中配置validatorPlugIn插件

代码

 

<plug-in className="org.apache.struts.validator.ValidatorPlugIn">   
<set-property value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" property="pathnames"/>  
</plug-in>

 

使用Validator做SpringMVC的验证框架 - 使用Validator

前面一章我们已经搭好SpringMVC的环境了。现在开始学习Validator框架的使用吧 Validator框架源码地址:https://github.com/devefx/validator ...
  • devefx
  • devefx
  • 2016年06月02日 15:35
  • 3763

struts的validator验证框架

Struts2验证框架   Action配置中一定要设置input返回页面 注意事项 注意:1.要验证的方法不能叫input.2.这样配置在form表单中要在s:form action...
  • a15134673751
  • a15134673751
  • 2017年04月26日 15:09
  • 105

使用Validator做SpringMVC的验证框架 - Validator前端验证

上一章只为大家介绍了Validator的后端验证功能,接下来就为大家介绍一下Validator前端功能,你会发现他的巧妙之处。 Validator框架源码地址:https://github.com...
  • devefx
  • devefx
  • 2016年06月03日 09:58
  • 5200

jQuery表单验证插件Validator的使用方法

from表单数据的合法性验证是个很常见的需求,jQuery提供了一个插件:jquery validate 官网下载。    若想使用需先引用jquery.validate.js,并且要在jquery...
  • u014291497
  • u014291497
  • 2016年03月15日 23:12
  • 2852

使用Validator做SpringMVC的验证框架 - 配置SpringMVC环境

让我们用Validator框架来给SpringMVC实现验证功能吧 Validator框架源码地址:https://github.com/devefx/validator 完成这一章教程的要求 熟...
  • devefx
  • devefx
  • 2016年06月02日 11:28
  • 3966

使用Validator做SpringMVC的验证框架 - 自定义验证组件

章节列表 第一章:使用Validator做SpringMVC的验证框架 - 配置SpringMVC环境 第二章:使用Validator做SpringMVC的验证框架 - 使用Validator 第三章...
  • devefx
  • devefx
  • 2016年06月06日 15:13
  • 4569

struts2中validator配置文件验证不起作用的问题解决办法、根源

在采用struts的xml配置方式校验数据时,发现怎么也不起作用。无法按照正常流程,走到input指向的页面。 一   问题的解决 很多博客说明了自己查找的方式,最后都指明了是因为配置文件格式不正确的...
  • Allen_Zhao_2012
  • Allen_Zhao_2012
  • 2015年06月06日 21:49
  • 5662

Struts2服务器端的验证(验证框架)

一、struts2验证框架介绍 Struts2中提供了一套服务器端验证的框架,通过验证框架可以实现对数据数据的验证。 struts2是webwork演变而来的,其验证框架正是webwork的那...
  • Speed_Pig
  • Speed_Pig
  • 2016年12月27日 10:20
  • 1210

Struts2之validate数据校验两种方式

1.Action中的validate()方法Struts2提供了一个Validateable接口,这个接口中只存在validate()方法,实现这个接口的类可直接被Struts2调用,ActionSu...
  • woaigaolaoshi
  • woaigaolaoshi
  • 2016年03月23日 11:18
  • 3633

Spring框架的validator验证器的实现

Spring框架的 validator 组件,是个辅助组件,在进行数据的完整性和有效性非常有用,通过定义一个某个验证器,即可在其它需要的地方,使用即可,非常通用。 那验证器该如何定义,注入到sprin...
  • shenzhenNBA
  • shenzhenNBA
  • 2016年06月25日 21:31
  • 2574
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:详解Struts中Validator验证框架的使用
举报原因:
原因补充:

(最多只允许输入30个字)