Validator验证框架

系统分析

在设计Validator验证框架时,需要明确以下问题。

(1)当用户没有输入数据时,弹出英文提示信息。

(2)当用户输入的数据长度大于系统设置的数据长度,弹出英文提示信息。

(3)当用户输入的账号或密码不正确,弹出英文提示信息。

1.2 工作流程图
Validator验证框架系统流程如图1所示。

技术要点分析

1.1 技术要点
Validator验证框架在Struts应用中得到了广泛的运用,Validator验证框架主要依赖两个Jar文件。
q jakarta-oro.jar:该文件主要提供了一些文本类、具有文本替换、过滤和分割等功能。
q commons-validator.jar:该文件提供了一个简单、可扩展的验证框架,包括了通用的验证方法和规则。
在Struts中,这两个Jar文件添加到应用WEB-INF/lib目录中。
Validator框架采用两个基于XML的配置文件来配置验证规则。这两个文件为validator-rule.xml和validation.xml。在Struts中,它们均存放在WEB-INF文件夹下。

1.2 validator-rules.xml文件
validator-rules.xml文件包括了一组通用的验证规则,对所有的Struts都适用。一般情况下,没有必要修改该文件,除非需要修改或扩展默认的规则。
说明:如果想扩展默认的验证规则,最好把自定义的规则放在另一个XML文件中,而不是直接添加到validator-rules.xml文件中,这样,当升级Validator框架的版本时,不需要修改validator-rules.xml文件。
在validator-rules.xml文件中,每个<validator>元素定义了一个唯一的验证规则。例如,以下代码定义了一个名为“required”的验证规则。

<validator name="required"
classname="org.apache.struts.validator.FieldChecks"
method="validateRequired"
methodParams="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionMessages,
javax.servlet.http.HttpServletRequest"
msg="errors.required"/>

(1)name属性
name属性指定验证规则的逻辑名,这个名字必须是唯一的。
(2)classname和method属性
classname和method属性分别指定实现验证规则逻辑的类和方法。
(3)msg属性
msg属性制定来自于资源文件中的消息key。当验证失败时,Validator框架将根据这个消息key到资源文件中查找匹配的消息文本。
(4)depends属性
depends属性制定在调用当前验证规则之前必须先调用的其他验证规则。例如以下“maxlength”验证规则的配置代码中使用了depends属性。

<validator name="maxlength"
classname="org.apache.struts.validator.FieldChecks"
method="validateMaxLength"
methodParams="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionMessages,
javax.servlet.http.HttpServletRequest"
depends="required"
msg="errors.maxlength"
jsFunction="org.apache.commons.validator.javascript.validateMaxLength"/>

以上代码表明,在调用“maxlength”验证规则之前,先调用“required”规则。如果depends属性包含多个验证规则,则用逗号隔开,例如:
depends="required,integer"
如果调用depends属性指定的验证规则验证失败,就不会再调用下一个规则。

1.3 valiation.xml文件
Validator框架的另一个配置文件为valiation.xml文件,这个文件用于声明Form Bean应该采用的验证例程,取代在ActionForm类中编程的方式来实现验证逻辑。下面将介绍valiation.xml文件中的元素。
(1)<form-validation>元素
<form-validation>元素是Validator配置文件的根元素,它包含两个子元素:<global>和<formset>元素。<global>元素可以出现0次或者多次,而<formset>元素可以出现一次或者多次。
(2)<global>元素
在<global>元素中可以定义<constant>子元素,它用来定义常量表达式,在文件的其余地方可以应用这些常量表达式。
(3)<formset>元素
<formset>元素包含两个子元素:<constant>和<form>。<constant>可以出现0次或者多次,<form>元素可以出现一次或者多次。

(4)<form>元素
<formset>元素的<form>子元素用于为表单配置验证规则,它的name属性指定了表单的名字。<form>元素可以包含一个或者多个<field>子元素。
(5)<field>元素
<form>元素的<field>子元素用于配置表单中的字段的验证规则。
(6)<msg>元素
<field>元素的<msg>子元素指定验证规则对应的消息文本。
(7)<arg>元素
<field>元素可以包括4个附加的子元素:<arg0>、<arg1>、<arg2>以及<arg3>,用户替换复合消息中的参数。<arg0>元素指定第一个替换值,<arg1>元素指定第二个替换值,依次类推。

(8)<var>元素

<field>元素还可以包含0个或者多个<var>元素。<var>元素用来向验证规则传递参数。

运行结果

Validator验证框架的更多相关文章

  1. Hibernate Validator验证框架中@NotEmpty、@NotBlank、@NotNull 的区别

    Hibernate Validator验证框架中@NotEmpty.@NotBlank.@NotNull的主要使用情况 @NotEmpty  用在集合类上面 @NotBlank   用在String上 ...

  2. spring MVC 使用 hibernate validator验证框架,国际化配置

    spring mvc使用hibernate validator框架可以实现的功能: 1. 注解java bean声明校验规则. 2. 添加message错误信息源实现国际化配置. 3. 结合sprin ...

  3. 学习Validator验证框架总结

    在项目开发中许多地方需要加以验证,对于使用if-else简单粗暴一个一个验证,spring的validation封装了Javax ValidationI校验参数,大大缩减了代码量. 以前的分层验证,从 ...

  4. SAR-303 xml validator验证框架

    // 配置文件详解 <mvc:annotation-driven validator="validator" /> <bean id="validato ...

  5. hibernate validate验证框架中@NotEmpty、@NotbBank、@NotNull的区别

    Hibernate Validator验证框架中@NotEmpty.@NotBlank.@NotNull 的区别 Hibernate Validator验证框架中@NotEmpty.@NotBlank ...

  6. jQuery Validate验证框架详解

    转自:http://www.cnblogs.com/linjiqin/p/3431835.html jQuery校验官网地址:http://bassistance.de/jquery-plugins/ ...

  7. strus2验证框架

    为什么要用验证框架? 当验证规划比较复杂时,Action类的代码江边的非常繁琐,假如我们要对电话号码进行验证,是非常麻烦的. 验证框架的优点 Struts2中内置了一个验证框架,将常用的验证规则进行了 ...

  8. 【积累】validate验证框架的使用

    validate验证框架的使用:用验证框架可以很方便的验证前端页面输入的内容可以自定义验证方法 内容:0:环境搭建 1:基础用法 2:自定义用法 0:基本环境的搭建 0.1:下载js文件 0.2:引入 ...

  9. Struts2验证框架实例

    今天写了个Struts验证框架的实例,总算把验证框架弄清楚了. 上一篇Struts实例的action没有继承ActionSupport类,虽然也可以实现action的功能,但是却不能应用Struts提 ...

随机推荐

  1. 将mysql中的一张表中的一个字段数据根据条件导入另一张表中

    添加字段:alter table matInformation add facid varchar(99)  default ''; 导入数据:update matInformation m set ...

  2. python之yield的一些应用

    生成器 yield是用于生成器.生成器通俗的认为,在一个函数中,使用了yield来代替return的位置的函数,就是生成器.它不同于函数的使用方法是:函数使用return来进行返回值,每调用一次,返回 ...

  3. C语言博客作业2--循环结构

    1.1 思维导图 1.2 本章学习体会及代码量学习体会 1.2.1 学习体会 对本章学习感觉相对前面的难度有较大提升,而且刚开始对嵌套循环比较陌生,像龟兔赛跑和输出菱形都是用了较长时间才完成,所以我认 ...

  4. 可持久化线段树——区间更新hdu4348

    和线段树类似,每个结点也要打lazy标记 但是lazy标记和线段树不一样 具体区别在于可持久化后lazy-tag不用往下传递,而是固定在这个区间并不断累加,变成了这个区间固有的性质(有点像分块的标记了 ...

  5. jdbc连接数据库以及crud(简单易懂,本人亲测可用 有源代码和数据库)

    今天呢!重新整理了一边jdbc的相关操作:现在来说对于很多框架都使用mybatis和hibernate来操作数据库 ,也有很多使用自己简单封装的ssm或者是其他的一些框架来操作数据库,但是无论使用哪一 ...

  6. MyCat读写分离-笔记(四)

    概述 Mycat能够实现数据库读写分离,不能实现主从同步,数据库的备份还是基于数据库层面的.Mycat只是数据库的中间件: Mycat读写分离配置 在MySQL中间件出现之前,对于MySQL主从集群, ...

  7. 利用Skywalking-netcore监控你的应用性能

    Skywalking SkyWalking开源项目由吴晟于2015年创建,同年10月在GitHub上作为个人项目开源. SkyWalking项目的核心目标,是针对微服务.Cloud Native.容器 ...

  8. react-native中显示手机本地图片/视频

    已知文件路径'/data/user/0/com.ycdj/files/media/218787782/efa1d12f22d2/1235.jpg' 只需在路径前面拼上file:///即可,如: < ...

  9. Jmeter实现dubbo接口压测案例

    当前项目中重构了消息服务,需要对消息服务接口做性能压测,评估消息服务的性能情况 通过和开发对接,目前消息服务是通过dubbo接口对内提供服务,所以才有了这边文章的记录 最初的压测这个dubbo接口有三 ...

  10. js数组删除元素、json删除元素

    //数组var b=[1,2,3,4]; b.splice(b.indexOf(2,1)) //1,3,4 //json var arrayId=[{"id":233," ...