`

struts验证框架开发详解

阅读更多
struts验证框架开发详解


一、启用Validator插件

虽然Validator框架是与Struts封装在一起提供的,但在默认状况下Validator并不被启用。为了启用Validator,要向你的应用程序的struts-config.xml文件中添加下面的插件定义。

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

二、配置validator-rules.xml
    Struts示例应用程序带有这个文件的预配置拷贝。在大多数情况下,你不必修改这个预配置拷贝,除非你要向该框架中添加自己定制的验证。默认情况下,Validator中包括几个基本验证例行程序,你可以用它们来处理大多数验证问题。这些例行程序具有逻辑名称,如required(用于输入要求的值)、CreditCard(用于输入信用卡号码值)、email(用于输入电子邮件地址值),等等。

三、配置ApplicationResource.properties
    ApplicationResource.properties属性文件中这时应该追加用于验证错误的消息,validator-rules.xml的标准验证逻辑中包括了错误信息的名称,譬如required验证会在“msg”属性中包括errors.required消息,这时你就需要在ApplicationResource.properties中定义该消息,必须要和validator-rules.xml中的msg申明的消息名称一致。例如:

  errors.required={0} is required.
   errors.minlength={0} can not be less than {1} characters.
   errors.maxlength={0} can not be greater than {1} characters.
   errors.invalid={0} is invalid.

   errors.byte={0} must be a byte.
   errors.short={0} must be a short.
   errors.integer={0} must be an integer.
   errors.long={0} must be a long.
   errors.float={0} must be a float.
   errors.double={0} must be a double.

   errors.date={0} is not a date.
   errors.range={0} is not in the range {1} through {2}.
   errors.creditcard={0} is an invalid credit card number.
   errors.email={0} is an invalid e-mail address.



将这些信息直接拷贝到ApplicationResource.properties中即可。

四、创建Form
   根据不同情况分别可以创建三种类型的form:
   1、ValidatorForm
   2、DynaValidatorForm
   3、ValidatorActionForm和DynaValidatorActionForm
   注意:对于由myeclipse生成的静态form,如果在form中包括validate()方法,要将其去掉,否则,验证就会被这个空的validate()方法覆盖而没有发挥作用

   创建步骤类似,ValidatorForm需要具体的form,该form继承自ValidatorForm,并且不包含reset()和validate()方法,而DynaValidatorForm不需要具体的form,这两种form的实现方法基本相同,

对ValidatorActionForm和DynaValidatorActionForm的解释:

   对于1、2两种验证有一点不足,就是在validation.xml文件中将表单属性的验证捆绑到具体的form上了,譬如:

<form name="registerForm">
            <field
                property="userName"
                depends="required">
                    <arg key="label.username"/>
            </field>
            <field
                property="passWord"
                depends="required,maxlength">
                    <arg0 key="label.password"/>
                    <arg1 name="maxlength" key="${var:maxlength}" resource="false"/>
                    <var>
                      <var-name>maxlength</var-name>
                      <var-value>8</var-value>
                    </var>
            </field>          
            <field
                property="phone"
                depends="required,mask">
                    <arg key="label.phone"/>
<var>
                        <var-name>mask</var-name>
                        <var-value>^[0-9]*$</var-value>
                    </var>
            </field>
        </form>


        可以看到,form的name属性指定了具体的form即registerForm,下面对三个属性的验证规则只能用在registerForm上,如果这三个验证规则是通用的就好了,也就是说如果存在注册表单和修改表单的操作都能够使用这三个规则就好了,这时就要引入一个概念就是验证跟随操作,而不是绑定到具体的form上。例如注册表单和修改表单由于验证规则相同,则将三个验证规则放到具体的action上就行了,验证规则可以如下定义:

<form name="/register">
            <field
                property="userName"
                depends="required">
                    <arg key="label.username"/>
            </field>
            <field
                property="passWord"
                depends="required,maxlength">
                    <arg0 key="label.password"/>
                    <arg1 name="maxlength" key="${var:maxlength}" resource="false"/>
                    <var>
  <var-name>maxlength</var-name>
                      <var-value>8</var-value>
                    </var>
            </field>          
            <field
                property="phone"
                depends="required,mask">
                    <arg key="label.phone"/>
                    <var>
                        <var-name>mask</var-name>
                        <var-value>^[0-9]*$</var-value>
                    </var>
            </field>
        </form>
           <form name="/editregister">
            <field
                property="userName"
                depends="required">
                    <arg key="label.username"/>
            </field>
            <field
                property="passWord"
depends="required,maxlength">
                    <arg0 key="label.password"/>
                    <arg1 name="maxlength" key="${var:maxlength}" resource="false"/>
                    <var>
                      <var-name>maxlength</var-name>
                      <var-value>8</var-value>
                    </var>
            </field>          
            <field
                property="phone"
                depends="required,mask">
                    <arg key="label.phone"/>
                    <var>
                        <var-name>mask</var-name>
                        <var-value>^[0-9]*$</var-value>
                    </var>
            </field>
        </form>


     上面form的name属性已不再是struts-config.xml中定义的form的name,而是其中定义的action的path属性值。

      为了解决这个问题,Validator提供了两个附加的ActionForm子类,它使你能够将验证与操作相关联,而不是与Form Bean相关联。这样你就可以根据哪个操作正在使用Form Bean来指定把哪些验证用于该Form Bean了。

五、创建Validation.xml
下面介绍一下validation.xml配置文件的标签:
<form-validation></form-validation>是总框架
<formset></formset>是对Form里的数据进行配置
<form name="ActionForm对应的名称"></form>对一个ActionForm里的数据进行验证配置
<field property="ActionForm里的属性名" depends="验证规则,可以是Validation-rules里定义好的也可以是自定义的验证规则">这里配置一个属性的验证内容
<arg0 name="对应的验证规则名称" key="可以直接填入数值,也可填入变量表达式:${var:变量名}" resource="true/false"(代表是否从资源文件中读取信息,否则Key的值以参数的形式返回)>
<var></var>定义一个变量的标签体,可以在里面具体设置变量的名称以及数值
<var-name>对应Key里定义的变量名称</var-name>
<var-value>值</var-value>
<msg name="对应的验证规则名称" key="资源文件中定义的变量名称">这里定义了信息变量后,会默认定义的信息变量。
在验证规则中大部分可以使用已经预定义好的规则,它们在validator-rules.xml里,当然我们自己也可以定义规则。

其实,这个文件名可以是任意的,可以起成别的名字,比如:validators.xml,不过,也要相应修改struts-config.xml文件中的加入validator框架PlugIn中的value属性。这个value属性用来指定validator-rules文件和具体的验证文件。

1)根元素:
validators.xml文件的“根元素(Root)”是form-validation,
意味着整个文件的内容包含在“<form-validation>”和“</form-validation>”之间,

2)元素global:
这个东西包含constant子元素,用来定义一个全局的“验证限制”,
以便在这个文件的其他地方使用这些验证规则。
例如:

<global>
        <constant>
            <constant-name>userName</constant-name>
            <constant-value>^\s*[\w-]{0,30}$</constant-value>
        </constant>
        <constant>          
            <constant-name>password</constant-name>
            <constant-value>^\s*[.\w@#!$%^*()-]{6,20}\s*$</constant-value>
        </constant>
        <constant>      
            <constant-name>email</constant-name>
<constant-value>^\s*([A-Za-z0-9]+(\.\w+)*@([\w-]+\.)+\w{2,3})\s*$</constant-value>
        </constant>
    </global>

完整实例如下:
<form-validation>
    <global>
        <constant>
            <constant-name>userName</constant-name>
            <constant-value>^\s*[\w-]{0,30}$</constant-value>
        </constant>
        <constant>          
            <constant-name>password</constant-name>
            <constant-value>^\s*[.\w@#!$%^*()-]{6,20}\s*$</constant-value>
        </constant>
        <constant>      
            <constant-name>email</constant-name>
            <constant-value>^\s*([A-Za-z0-9]+(\.\w+)*@([\w-]+\.)+\w{2,3})\s*$</constant-value>
        </constant>
    </global>
  <formset>
    <form name="employeeActionForm">
    <field property="vname" depends="required,maxlength">
      <arg0 key="employee.name"/>
      <arg1 name="maxlength" key="${var:maxlength}" resource="false"/>
      <var>
        <var-name>maxlength</var-name>
        <var-value>10</var-value>
      </var>
    </field>
    <field property="vsex" depends="required,maxlength">
      <arg0 key="employee.sex"/>
      <arg1 name="maxlength" key="${var:maxlength}" resource="false"/>
      <var>
        <var-name>maxlength</var-name>
<var-value>5</var-value>
      </var>
    </field>
    <field property="vage" depends="required,integer,intRange">
      <arg0 key="employee.age"/>
      <arg1 name="intRange" key="${var:min}" resource="false"/>
      <arg2 name="intRange" key="${var:max}" resource="false"/>
      <var>
        <var-name>min</var-name>
        <var-value>1</var-value>
      </var>
      <var>
        <var-name>max</var-name>
        <var-value>100</var-value>
      </var>
    </field>
    <field property="vmoney" depends="integer">
      <arg0 key="employee.money"/>
    </field>
    </form>
  </formset>
</form-validation>


对部分元素的解释:
field元素定义了对特定属性的验证。
分享到:
评论

相关推荐

    Struts验证框架配置详解

    Struts验证框架是Java Web开发中的一个重要组成部分,它主要用于确保用户输入的数据符合应用程序设定的规则,从而提高数据的准确性和安全性。本篇文章将深入探讨Struts验证框架的配置过程,帮助开发者更好地理解和...

    Struts2框架开发详解

    对于Web项目中的验证,Struts2提供了一套完整的验证框架,允许开发者定义验证规则并在请求处理前进行校验,有效防止了无效数据进入系统。此外,为了支持多语言环境,Struts2还集成了Web项目的国际化功能,使得开发者...

    struts2框架详解

    Struts2框架详解 Struts2是Java Web开发中的一款广泛应用的开源MVC框架,它构建在Apache Struts 1的基础上,提供了更为强大的功能和更好的灵活性。Struts2旨在简化Web应用开发,通过将表现层与业务逻辑层解耦,提高...

    Struts2.0框架技术详解

    ### Struts2.0框架技术详解 #### 一、MVC思想 **1.1 Model I 模式和 Model II 模式** ##### 1.1.1 Model I 模式 在Model I模式下,整个Web应用几乎全部由JSP页面组成。JSP页面不仅接收处理客户端请求,还直接...

    struts框架及校验框架详解

    Struts框架是Java Web开发中的一个关键组件,它属于Java EE(J2EE)平台的一部分,主要用于构建...通过深入学习"struts框架及校验框架详解"文档,开发者能更有效地利用Struts来创建高效、稳定且易于维护的Web应用程序。

    Struts 结合 Validate框架验证详解

    Struts是一个广泛使用的Java Web开发框架,它极大地简化了MVC(模型-视图-控制器)应用程序的构建。在Struts框架中,数据验证是非常重要的一环,它确保了用户输入的数据符合应用的要求,提高了应用的安全性和用户...

    Struts2开发详解

    Struts2提供了内置的验证框架,可以在Action类中定义验证规则,或者使用XML文件进行外部化验证。验证框架可以在用户提交表单前检查输入数据,防止无效数据进入系统,提高数据质量。 **4. 国际化** Struts2支持多...

    张龙老师Struts2应用开发详解源码(全)

    张龙老师的Struts2应用开发详解源码课程,旨在帮助开发者深入理解Struts2框架的工作原理,掌握其核心特性和最佳实践。 1. **Struts2框架概述**: Struts2是Struts1的升级版,由Apache软件基金会维护。它继承了...

    Hibernate+struts2框架

    **Hibernate+Struts2框架详解** 在Web应用开发中,Hibernate和Struts2是两个非常重要的框架,它们分别处理持久层和控制层的任务。Hibernate是一个强大的对象关系映射(ORM)框架,它允许开发者以面向对象的方式操作...

    Struts基础与案例开发详解

    通过这个“Struts基础与案例开发详解”教程,你可以全面了解Struts框架的基础知识,并通过实际的项目练习提升开发技能。无论是初学者还是有经验的开发者,都能从中受益,进一步掌握Java Web开发的精髓。

    Struts2应用开发详解06

    在“Struts2应用开发详解06”这一主题中,我们将深入探讨Struts2中的自定义方法以及相关的开发建议。 自定义方法在Struts2中扮演着至关重要的角色,它们允许开发者扩展框架的功能,以满足特定项目的需求。自定义...

    Struts2 工作原理 Struts2框架 有图

    Struts2框架作为Java Web开发领域中的一款经典MVC(Model-View-Controller)框架,其工作原理涉及到了一系列复杂的组件交互与流程控制。本文将深入解析Struts2的工作流程,帮助开发者理解其核心机制。 ### 一、...

    struts2校验框架

    ### Struts2校验框架详解 #### 一、概述 Struts2作为一款流行的Java Web应用框架,提供了丰富的功能来支持开发人员构建高效且可维护的应用程序。其中,Struts2校验框架(Validation Framework)是该框架的核心特性...

    Struts基础与案例开发详解04

    在"Struts基础与案例开发详解04"中,我们将深入探讨Struts的核心组件之一:标签库。这个章节涵盖了五种主要的标签,包括html、bean、logic、template和nested,它们极大地提升了开发效率,使得开发者可以更快速地...

    Struts2框架基础 一

    #### 四、Struts2配置文件详解 1. **struts.xml配置文件**: - 是Struts2的核心配置文件,定义了应用程序的行为以及各个组件之间的关系。 - 典型的配置项包括但不限于包配置、拦截器配置、结果配置等。 - **包...

    struts1框架(6)

    Struts1框架是Java Web开发中的一个经典框架,由Apache软件基金会维护,它基于Model-View-Controller(MVC)设计模式,旨在简化企业级应用的构建。在本篇文章中,我们将深入探讨Struts1的核心概念、工作原理以及如何...

    Struts2应用开发详解02

    在"Struts2应用开发详解02"的主题中,我们将深入探讨Struts2.2的独有特性以及其核心组件之一——StrutsPrepareAndExecute过滤器的源码分析。 首先,让我们来看看Struts2.2的独有特性: 1. **插件化架构**:Struts...

    struts2 校验框架

    ### Struts2校验框架详解 #### 一、引言 在Web开发中,表单数据的有效性验证是一项重要的工作。Struts2框架提供了一套强大的校验机制,可以帮助开发者轻松实现客户端和服务端的数据验证。本文将通过一个具体的示例...

    Struts框架详解

    ### Struts框架详解 #### 一、Struts框架概述 Struts框架是一个开源的Java Web应用框架,基于Model-View-Controller(MVC)架构模式。该框架的主要优点在于其高度模块化的设计,具备良好的灵活性和重用性,极大地...

    struts框架原理图

    根据提供的文件信息,“Struts...同时,Struts框架还提供了一系列强大的工具和API,如表单验证、国际化支持等,大大提高了开发效率。对于希望构建复杂Web应用的开发者来说,深入理解Struts框架的工作原理是非常必要的。

Global site tag (gtag.js) - Google Analytics