Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2539520
  • 博文数量: 709
  • 博客积分: 12251
  • 博客等级: 上将
  • 技术积分: 7905
  • 用 户 组: 普通用户
  • 注册时间: 2005-07-17 00:00
个人简介

实现有价值的IT服务

文章存档

2012年(7)

2011年(147)

2009年(3)

2008年(5)

2007年(74)

2006年(431)

2005年(42)

分类: 系统运维

2006-07-07 12:06:49

在Struts中使用Validator框架
作者: Chuck Cavaness
原文:
译者: duke
Email:duke@263.net
QQ:658155
MSN:duke@hotmail.com

每个应用都有责任确保它们插入到后台资料库的数据是合法有效的,毕竟,如果这些应用所依赖的数据一旦遭到了破坏,那将是灾难性的,那应用还能拿什么来使自己正常运转呢?比如说,使用正规关系的一个应用,中的每个字段都有自己一定的规则和约束,来保证存储在其中的数据在一定程度上的正确性。任何要使用后台资料库数据的应用都有责任保护它们提交的数据的完整性。
任何试图插入或更新不符合标准的数据的操作都有可能被发现并拒绝。这种检测可能遍布在整个应用的每个角落,在表现层可能进行一些验证,在业务逻辑层,商业逻辑对象一般也有商业逻辑的验证,还有在后台资料库也要对数据进行检查。
不幸的是,由于这种验证在应用中无处不在,造成了应用在一定程度上的验证数据的代码冗余。这并不是应用所希望的,因为这种在多处的重复劳动,使得应用的部署和维护要花去更多的时间。如果在整个应用中,这些验证规则可以重复使用,将使得应用更加富有弹性,换句话说就是,部署更快捷,定制更容易,更灵活。
Jakarta Commons 项目Validator框架简介
Validator是由David Winterfeldt创建的开源项目,它也是Jakarta Commons的一个子项目。Commons项目主要是提供一些像Validator这样的一些可重用组件。其他著名的Commons组件还有如BeanUtils,Digester,Logging框架等。Validator 1.0版本发布于2002年11月初。
使用Validator的好处
.使用Validator框架比一般的在应用的代码中定义验证规则有好多优点,如:
.可以在一处为应用定义验证规则;
.验证规则和应用是松耦合的;
.端和客户端的验证规则可以在同一处定义;
.配置新验证规则或修改已有验证规则变得更加简单;
.支持国际化;
.支持正则表达式;
.可以用于Web应用也可用于标准的Java应用;
.采用声明的方法实现而不是编程实现;
除了之外,Validator最大的特征就是自身支持可插性(pluggability)。在文章的后
面你将会看到使用Validator框架内置的验证规则来更好地完成你的工作,而更重要的是,Validator框架允许你自定义验证,并插入到框架中。
Struts和Validator的关系
应该指出的是Validator框架本身是因Struts框架而建立的。Validator的创建者David Winterfeldt在使用Struts的过程中发现,在许多ActionForm类中需要反复使用同一个验证规则,这样造成了大量的代码冗余。于是他决定创建Validator框架来消除这种冗余,这样Validator就诞生了。
尽管Validator架构最初是为Struts架构而生,但它还是被设计和构造成了可以独立于Struts架构而单独使用。这一个特征使得你可以在任何的应用中使用这个框架,不必管它是不是Struts架构的。并不会因为你不使用Struts框架而影响Validator架构对你的应用作用。事实上,这就是为什么Validator是Jakarta Commons项目的一部分而不直接是Struts项目的一部分。
现在,我们来将这个框架整合应用到像基于Struts构架这样的Web应用上。在文章的最后中我们再介绍如何把它应用到其他类型的应用中,如基于EJB的应用。
Validator组件概述
Validator架构有下面这些组件组成:
Validators;
配置;
资源绑定;
JSP自定义标签;
Validator Form类;
什么是Validators?
一个Validator就是,执行一个验证规则时Validator框架调用的一个Java类。框架根据配置中定义的方法签名来调用这个Validaotor类。一般情况下,每个Validator类提供一个单独的验证规则,然后这些规则可以组合成更复杂的规则集。

注意:有时出于方便,一个Validator类也可以定义多个验证规则,而每个规则是一个静态方法且并不包含任何客户端状态信息。
框架提供了14种默认的验证规则,有时候这些规则也被称为Validator框架的“基本规则”,这些基本规则如表一:
名称 描述
byte,short,integer, 检验值是否能被转换成对应的基本数据类型
long,float,double
creditCard 检验输入域是否是一个合法的信用卡号码
date 检验输入域是否是一个合法日期
email 检验输入是否是一个合法Email地址
mask 检验输入域是否能成功匹配一个正则表达式
maxLength 检验值的长度是否小于等于给定的最大长度
minLength 检验值的长度是否大于等于给定的最小长度
range 检验值的范围是否在最大值和最小值之间
required 检验输入域是否为不为空,或不包含空格值的长度是否大于零
表一
正像你在表一中看到的,Validator框架提供了Web应用需要的大多数的验证规则。你可以使用这些现有的验证规则来创建自己验证配置。尽管这样,也正如我们前面提到的,和后面要讲到的,你可以根据你的需要随意的增加更多的Validator。
现在,让我们来讨论如何在一个基于Struts架构的应用中配置使用这些基本的Validator。
使Validator框架具有弹性的原因在于所有的验证规则和其具体细节都是通过在外部中配置声明实现的。你的应用并不必要知道这些具体的验证规则。这一特征使得规则集的发生扩展和修改时,你并不用去动你应用的源代码。这一点对你要进行每次的个性化安装或当需求发生变化时来说是非常重要的。
如果你使用Struts1.1的Validator框架,你会用到这样两个配置,一个叫validator- rules.xml,另一个叫validation.xml;其实你也可以随意的给他们命名,甚至可以把它们合并成一个XML。但是,你还是最好把它们分开,因为它们各有各的用途。

注意:如果你从Jakarta网站上下载Validator,并不包含这两个。只有在包含的Validator框架的Struts的下载中才可以找到这两个。
validator-rules.xml
validator-rules.xml定义应用可以使用的Validator。validator-rules.xml充当模板的作用,定义所有应用可能要用到的Validator。

注意:这个xml和我们下面要讨论的另一个xml都应该放到类加载器可以找得到的地方。当我们在Web应用中使用Validator框架时,正确的位置应该是在WEB-INF下。
validator-rules.xml服从validator- rules_1_1.dtd的管理,validator- rules_1_1.dtd可以在jakarta.apache.org/struts/dtds/validator- rules_1_1.dtd下载到。我们并不想花太多的时间放在研究这个的具体细节上,我们在这儿只作一些基本的介绍。
validator-rules.xml中最重要的元素包含在元素中,例如,例一:
例一:一个简单的validator-rules.xml


       name="required"
     classname="org.apache.struts.util.StrutsValidator"
     method="validateRequired"
     methodparams=".lang.Object,
                   org.apache.commons.validator.ValidatorAction,
                   org.apache.commons.validator.Field,
                   org.apache.struts.action.ActionErrors,
                   x.servlet.http.HttpServletRequest"
     msg="errors.required"/>
     
       classname="org.apache.struts.util.StrutsValidator"
     method="validateMinLength"
     methodparams=".lang.Object,
                   org.apache.commons.validator.ValidatorAction,
                   org.apache.commons.validator.Field,
                   org.apache.struts.action.ActionErrors,
                   x.servlet.http.HttpServletRequest"
   depends="required"
                 msg="errors.minlength"/>



应用使用的每个Validator对应一个元素。在例一中给大家展示了两个Validator,一个是请求Validator,另一个是最小长度Validator。元素支持许多属性。这些属性是必要的,用于告知框架这个Validator应当调用哪个正确的类和方法。例如,例一中的请求Validator元素表明这个Validator将调用org.apache.struts.util.StrutsValidator类的validateRequest()方法。Validator也可能要依赖另一个Validator,如例一中的最小长度的Validator就是这样一个例子,它包含一个depends属性,用它来表示这个Validator将依赖于请求Validator。msg属性用一个键值指定一个资源绑定,框架将用它来生成正确的错误信息。资源绑定的使用有益于错误信息的本地化。
元素还支持
阅读(846) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~