在struts中使用Validator框架

Validator验证框架
Validatro框架以成为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 >    
 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配置文件的<action>元素的name属------>validator.xml文件<form>元素的name属性
ValidatorActionForm
Strust配置文件的<action>元素的path属------>validator.xml文件<form>元素的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的<html:javascript>标签,他能在jsp页面中生成用于客户端验证
的JavaScript的脚本。
1) 在validator-rules.xml文件的<validator>元素中配置<javascript>元素
默认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事件
代码<html:form action="manageContract.do" οnsubmit="return validateContractForm(this);">   <script type="text/javascript">render_code();</script>
5) 用户在表单上提交后,就会调用<html:javascript>
标签生成的js脚本validateLoginForm函数,执行验证。如果验证失败,就会弹出对话框提示,
不会提交的服务器端。

小结
使用步骤
1) 创建扩展ValidatorForm或ValidatorActionForm类的ActionForm,如果使用动态ActionForm,
则不用扩展DynaValidatorForm或DynaValidatorActionForm类的子类,可以直接进行第二步
2) 在struts文件中配置form和action元素
3) 把validator框架使用的文本信息添加到应用的Resource Bundle中

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

4)在validatorxml文件中为表单配置验证规则
5)在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 >     


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值