`
sd8089730
  • 浏览: 258707 次
  • 性别: Icon_minigender_1
  • 来自: 吉林
社区版块
存档分类
最新评论

Structs的validator验证框架

阅读更多

Validator验证框架
Struts框架能够在ActionForm Bean 的validate()方法中对用户输入的表单数据进行验证。这种验证方法有两种局限性:
 必须通过程序代码来实现验证逻辑,如果验证逻辑发生变化,必须重新编写和编译程序代码。
 当系统中有多个ActionForm Bean,并且它们包含一些相同的验证逻辑时,开发人员必须对每个ActionForm Bean进行重复编程,完成相同的验证逻辑,这会降低代码的可重用性。
Validator框架主要依赖于两个JAR文件:
Jakarta-oro.jar,提供了一组处理文本的类,具有文本替换、过滤和分割等功能。
Commons-validator.jar;提供了一个简单、可扩展的验证框架,包含了通用的验证方法和验证规则。
Validator框架采用两个基于XML的配置文件来配置验证规则。这两个文件为validator-rules.xml和validation.xml。在struts应用中,它们均放在WEB-INF目录下。
validator-rules.xml文件:
validator-rules.xml文件包含了一组通用的验证规则,对所有的Struts应用都适用。
Validation.xml文件
Validation.xml文件是针对于某个具体Struts应用的,需要开发人员来创建,它可以为应用中的ActionForm配置所需要的验证规则。
下面显示了一个简单的validation.xml文件样例。
<form-validation>
<golobal>
<constant>
<constant-name>phone</ constant-name>
<constant-value>^\d{8}*$</constant-value>
</constant>
</golobal>

<formset>
<form name=”checkoutForm”>
<field
property=”phone”
depends=”required,mask,minlength”>
<arg0 key=”label.phone”/>
<arg1 name=”minilength” key=”${var:minlength}” resource=”false”/>
<var>
<var-name>mask</ var-name >
<var-value>${phone} </var-value>
</var>
<var>
<var-name>minlength</ var-name >
<var-value>7 </var-value>
</var>
</field>
</form>
</formset>
</form-validation>

1.<form-validation>元素
validation_1_1.dtd描述了validation.xml文件的语法。validation.xml文件的根元素为<form-validation>元素,它包含两个子元素:<global>和<formset>。<global>元素可以出现零次或多次,而<formset>元素可以出现一次或多次。它们的DTD定义如下:
<!element form-validation(global*,formset+)>
2.<global>元素
在<global>元素中可以定义<constant>子元素,它用来定义常量表达式,在文件的其余地方可以引用这些常量表达式。以下代码配置了两个<constant>元素:
<golbal>
<constant>
<constant-name>phone</constant-name>
<constant-value>^\d{8}\d*$</constant- value >
</constant>
<constant>
<constant-name>zip</constant-name>
<constant-value>^\d{6}\d*$</constant- value >
</constant>
</golbal>
以上代码定义了两个常量phone和zip,在<formset>元素中可以通过${constant-name}的形式来引用它们,例如访问phone常量的形式为${phone}.
3.<formset>元素
<formset>元素包含两个子元素:<constant>和<form>。<constant>可以出现零次或多次,<form>元素可以出现一次或多次。

提示 在<global>中定义的<conatant>元素代表全局常量,而在<formset>元素中定义的<conatant>元素代表局部常量,后者只能在当前<formset>元素中使用

<formset>元素有两个属性:language和country。Language和country属性用于支持I18N。本章的10.7节将对此做介绍。
4.<form>元素
<formset>元素的<form>子元素用于为表单配置验证规则,它的name属性指定了表单的名字。<form>元素可以包含一个或多个<field>子元素.
5.<field>
<form>元素的<field>子元素用于配置表单中字段的验证规则。例如对checkoutForm表中的 phone字段配置了验证规则/
对<field>元素的属性做了描述。
<field>元素的属性
Property 指定ActionForm Bean中需要进行验证的字段的名字
Depends 指定字段的验证规则,多个规则之间以逗号隔开。

<field>元素也包含一些子元素,它的DTD定义如下:
<!element field(msg?,arg0?, arg1?, arg2?, arg3?,var*)>

6.<msg>
<field>元素的<msg>子元素指定验证规则的对应的消息文本。该消息文本将替代在validator-rules.xml文件中为验证规则配置的默认的消息文本。例如:
<field property=”phone” depends=”required,mask,minlength”>
<msg name=”mask” key=”phone.invalidformat”/>
….
</field>
以上代码的<msg>元素表明,当”mask”验证规则验证失败时,错误消息文本来自于 Resource Bundle,消息key为 “phone.invalidformat”.
<msg>元素有三个属性, DTD定义如下:
<!ATTLIST msg name CDATA#IMPLIED
key CDATA#IMPLIED
resource CDATA#IMPLIED >
对<msg>元素的属性做说明。
属性 描述
Name 指定验证规则的名字
Key 当resource属性为true时,key属性指定消息key,该消息key应该在Resource Bundle中存在,当resource属性为true时,属性直接指定消息文本
Resource 当此项为true时,表示使用来自 Resource Bundle的消息,如果为false,表示直接在key属性中设置消息文本,默认值为true
7.<arg>元素
<field>元素可以包含四个附加的子元素:<arg0><arg1><arg2><arg3>,用于替换复合消息中的参数。<arg0>元素指定第一个替换值,<arg1>指定第二个值,依次类推。每个arg元素包含三个属性:name、key和resource,这些属性用法和<msg>元素很相似。
包含<arg0><arg1>元素的<field>元素
<field
Property=”phone”
depends=”required,mask,minlength”
<arg0 key=”label.phone”/>
<arg1 name=”minlength” key=”${var:minlength}” resource=”false”/>
<var>
<var-name>mask</var-name>
<var-value>${phone}</var-value>
</var>
<var>
<var-name>minlength</var-name>
<var-value>7</var-value>
</var>
以上代码没有配置<msg>元素,因此当某个验证规则失败时,将使
用在validator-rules.xml中配置的默认消息文本。例如,如果
minlength验证规则失败,则validator-rulex.xml中设置的消息
key为”errors.minlength”:
<validator
name=”minLength”
…..
Msg=”errors.minlength”
</validator>
在资源文件中与errors.minlength匹配的中文消息文本为:
errors.minlength={0}不能少于{1}字符
<arg0>元素没有设置name属性,因此适用于所有验证规则,它将取
代以上复合消息中的第一个参数{0},<arg0>元素的key属性
为”label.phone”,在资源文件中与之匹配的中文消息文本为:
label.phone=电话
<arg1>元素的name属性为”minlength”,表示仅适用
于”minlength”验证规则。它将取代以上复合消息中的第二个参数
{1}.<arg1>元素的resource属性为false,表明此时key属性直接指
定文本。key属性值由变量${var:minlength}决定,此处值为7.
当”minlength”验证规则验证失败时,<arg0>和<arg1>元素将分别
取代以上复合消息中的两个参数。

8.<var>元素
<field>元素还可以包含零个或多个<var>元素。<var>元素用来向验
证规则传递参数。
<var>
<var-name>mask</var-name>
<var-value>${phone}</var-value>
</var>
phone常量的值为”^\d{8}\d*$”,它定义了一种字符模式,表示字
符串长度为8位,并且只能包含数字字符。mask验证规则能够比较
用户输入的phone字段是否和指定的字符模式匹配。
<arg>元素也可以访问<var>元素,语法为${var:var-name},例如:
<arg1 name=”minlength” key=”${var:minlength}” resource=”false”/>
<var>
<var-name>minlength</var-name>
<var-value>7</var-value>
</var>
Validator插件
为了在Struts框架中使用Validator,可以采用插件机制把Validator加入到框架中。这需要在Struts配置文件中配置ValidatorPlugIn插件,代码如下:
<plug-in className=”org.apache.struts.validator.ValidatorPlugIn”>
<set-property
propery=”pathnames”
value=”/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml”/>
</plug-in>
当应用启动时,Struts框架会加载ValidatorPlugIn插件并调用它的init()方法。init()方法根据pathnames属性,加载相应的validator-rules.xml和validation.xml文件,把验证信息读入到内存中。

Validator框架和ActionForm
Validator框架不能用于验证标准的org.apache.struts.action.ActionForm类。如果要使用Validator框架,应该采用ActionForm类的两个子类:org.apache.struts.validator.DynavalidtorForm和org.apahce.struts.validator.ValidatorForm。ActionForm类及其子类的框图如图:

DynaValidatorForm支持在动态ActionForm中使用Validator框架,ValidatorForm支持在标准ActionForm中使用Validator框架。无论是对于动态ActionForm还是标准ActionForm,配置Validator框架的方式都是一样的。
DynavalidatorForm和ValidatorForm类都实现了validate()方法,所以当创建他们的子类时,不必再覆盖validate()方法。validatorForm类的validate()方法的代码如下:

public ActionErrors validate(ActionMapping mapping,HttpServletRequest request){
ServletContext application = getServlet().getServletContext();
ActionErrors errors = new ActionErrors();

String validationKey = getValidationKey(mapping,request);

Validator validator = Resources.initValidator(validationKey, this,application,request,error,page);
try{
validatorResults = validator.validate();
}catch(ValidatorException e){
log.error(e.getMessage(),e);
}
return errors;
}
以上validate()方法调用验证框架的验证方法进行验证,如果验证失败,就会创建包含错误消息的ActionMessage对象,并把该对象添加到ActionErrors集合对象中。validate()方法最后返回ActionErrors对象。
ValidatorForm有一个子类ValidatorActionForm。下图指示为这两种类的区别。









Validator框架提供这两种类的目的在于可以更加精确的控制执行验证条件。例如,
假定有个名为“editForm”的表单对应两个Action:saveAction和cancelAction,如图:






假定editForm表单包含两个验证规则:验证A和验证B。如果对于用的保存或取消动作,都要执行两个验证,则可以创建一个扩展ValidatorForm类的EditForm类,然后再validation.xml中作如下配置:

<formset>
<form name=”editForm”>
验证规则A
验证规则B
</form>
…….
</formset>
如果对于用户的保存动作,仅执行验证规则A,对于取消动作,仅执行验证规则B,则可以创建一个扩展ValidatorActionForm类,然后再validation.xml中作如下配置:
<formset>
<form name=”/save”>
验证规则A
</form>
<form name=”/cancel”>
验证规则B
</form>
…..
</formset>

对于动态ActionForm,也有DynaValidatorForm和DynaValidatorActionForm之分,它们的区别于ValidationForm和ValidatorActionForm的区别一样。

分享到:
评论

相关推荐

    Struts Validator验证框架详细讲解.txt

    ### Struts Validator 验证框架详细讲解 #### 引言 在Java Web开发中,数据验证是确保应用程序安全性和用户体验的重要环节。Struts框架作为早期流行的MVC框架之一,提供了强大的验证机制——Struts Validator,它...

    Struts validator验证框架

    Struts Validator是一个强大的验证框架,它是Apache Struts框架的一部分,用于在Java Web应用程序中实现数据验证。这个框架帮助开发者在用户提交表单时确保输入的数据是合法、完整且符合业务规则的,从而提高应用...

    struts validator验证框架项目

    Struts Validator是一个强大的验证框架,它是Apache Struts框架的一部分,用于在Java Web应用程序中实现数据输入验证。这个项目集成了验证规则,使得开发者能够轻松地确保用户提交的数据符合预期的格式和约束,从而...

    struts validator验证框架例子

    Struts Validator是一个强大的验证框架,它是Apache Struts项目的一部分,专为Java Web应用程序设计,用于实现数据输入验证。Struts框架本身是一个MVC(模型-视图-控制器)架构,而Validator则是它的一个核心组件,...

    Struts1的validator验证框架

    ### Struts1的Validator验证框架详解 在Java Web开发领域,Struts1作为一个经典且流行的MVC框架,提供了丰富的功能来构建动态Web应用。其中,Validator框架是Struts1用于客户端和服务端表单验证的强大工具,它能...

    Struts的Validator验证框架使用教程

    Struts的Validator验证框架是Java Web开发中常用的一个组件,主要用于处理用户输入的数据验证。它提供了强大的、可扩展的验证规则,使得开发者可以方便地在应用程序中实施数据校验,从而保证了数据的准确性和安全性...

    struts 的validator框架验证

    Struts的Validator框架是Java Web开发中用于处理用户输入验证的一种强大的工具,它与MVC架构中的控制器层紧密结合,提供了一种便捷的方式来确保用户提交的数据符合预设的业务规则。这个框架大大简化了数据验证的过程...

    struts2验证框架

    1. Validator Framework:Validator Framework 是 Struts2 验证框架的核心组件,负责对用户输入的数据进行验证。Validator Framework 提供了一个通用的验证机制,可以对用户输入的数据进行验证。 2. Validators:...

    struts中使用validator验证框架

    Validator框架是Struts的一个重要组件,主要负责处理用户输入的数据验证,确保数据的完整性和正确性。在本文中,我们将深入探讨如何在Struts中使用Validator框架,并通过三个逐步进阶的实例来理解其工作原理。 首先...

    Struts Validator验证器使用指南

    Struts Validator框架是Struts框架的重要组成部分,用于实现客户端和服务器端的数据验证。自0.5版以来,Struts Validator就已集成在Struts中,起初作为开发人员包的一部分,随后其核心代码迁移到Jakarta Commons库和...

    IBM 的 Struts validator框架

    Struts Validator框架是Apache Struts框架的一个重要组成部分,由IBM公司提供支持,它主要用于Web应用程序中的数据验证。这个框架提供了一种结构化的方式来定义和执行客户端及服务器端的数据验证规则,确保用户输入...

    struts1.x使用common-validator验证框架

    此外,Struts1.x的验证框架不仅限于服务器端验证,也可以结合JavaScript进行客户端验证,以提高用户体验。客户端验证可以通过在JSP页面中引入Struts的JavaScript库,然后利用`&lt;html:javascript&gt;`标签生成相应的验证...

    struts1验证框架相当好的经典例子

    接下来,我们需要配置Validator插件,这是Struts1验证框架的核心。通过`&lt;plug-in&gt;`标签,指定类名为`org.apache.struts.validator.ValidatorPlugIn`,并设置`pathnames`属性指向`validator-rules.xml`和`validation....

    struts验证器validator使用,以及自定义验证器

    Struts是Java Web开发中的一个流行MVC框架,它的核心组件之一是Validator,用于处理表单数据的验证。本文将详细介绍Struts验证器Validator的使用,包括基础配置、自定义验证器的创建,以及如何在Maven项目中管理和...

    struts validator验证实例

    Struts Validator是Apache Struts框架的一个重要组成部分,用于在服务器端进行数据验证。它提供了一种灵活且可扩展的方式来确保用户提交的数据满足应用程序设定的规则和格式,从而提高应用程序的安全性和用户体验。...

    Struts1.3 Validator 验证框架校验Email 例子

    Struts1.3 与1.2向比验证框架部分还是有所区别的,该例子通过一个简单的Email的校验,演示如何通过Struts Validate验证框架进行在页面中生成JavaScripte脚本,进行客户端校验。下完后记得评分,资源分就会回来,还能...

    struts2验证框架简单示例

    在Struts2中,验证框架是处理用户输入验证的关键部分,它确保了从客户端接收到的数据的质量和准确性。本示例将深入探讨Struts2验证框架的基本用法,特别适合初学者理解和掌握。 ### 一、Struts2验证框架概述 ...

    Validator验证框架

    Validator验证框架,STRUTS动态验证的规则与规范!

Global site tag (gtag.js) - Google Analytics