`

Struts验证框架详解(validate)

阅读更多

一、启用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 结合 Validate框架验证详解

    本文将深入探讨如何结合Validate框架在Struts中实现有效的数据验证。 首先,我们需要理解Struts中的验证流程。当用户提交表单时,Struts会调用ActionForm对象的validate()方法进行验证。这个方法通常是根据业务逻辑...

    Struts2.0框架技术详解

    通过引入第三方验证框架(如Hibernate Validator),可以在Action类中使用注解来实现数据验证。 **示例代码**: ```java public class MyAction { @NotNull(message = "Username cannot be empty") private ...

    struts2验证框架

    ### Struts2 验证框架详解 #### 一、引言 在Web开发中,确保用户输入的有效性和正确性是至关重要的。Struts2作为一款流行的Java Web开发框架,提供了强大的验证功能来帮助开发者实现这一目标。本文将详细介绍Struts...

    实验指导\第二章Struts框架详解.doc

    Struts框架详解 Struts是Java Web开发中的一个开源MVC框架,由Apache软件基金会维护。它提供了一种结构化的方式来构建应用程序,使得开发者可以更有效地处理请求、控制流程、展示视图,以及管理业务逻辑。本实验...

    struts2最全验证框架

    ### Struts2 最全验证框架知识点详解 #### 一、Struts2 验证框架概述 Struts2 是一个基于MVC模式的Java Web开发框架,它提供了丰富的功能来简化Web应用的开发过程。其中,Struts2的验证框架是其重要的组成部分之一...

    struts2 自定义验证程序的实现方法详解

    Struts2 提供了一个强大的验证框架,允许用户创建自定义验证器来满足各种需求。 #### 二、自定义验证程序的实现 ##### 1. 实现 Validator 接口 为了实现自定义的验证器,首先需要继承或实现 Struts2 的 Validator...

    Struts2数据输入验证教程详解

    Struts2是一个流行的Java web开发框架,它提供了一种强大的数据输入验证机制,确保用户提交的数据符合预期格式和约束。本教程将深入讲解Struts2中的数据输入验证,包括两种主要验证方式:客户端验证和服务端验证。...

    Struts2的检证框架详解

    - **XML配置**:Struts2允许在struts.xml或action配置文件中定义验证规则,通过`&lt;validate&gt;`标签指定对应的验证规则文件。 - **注解配置**:Struts2也支持使用Java注解在Action类或字段上直接定义验证规则,更加...

    jquery validate配合struts2简单整改

    Struts2提供了一套完善的验证框架,包括Action类的校验注解和Validation.xml文件。我们可以在Action类的成员变量上添加注解,如@NotEmpty、@Email等,或者在Validation.xml中定义验证规则。 例如,对于上述的用户名...

    Struts2标签集锦(附Struts2标签详解word文档)

    此外,Struts2标签还支持各种事件处理和验证,如`onerror`属性用于指定错误处理方式,`validate`属性控制是否执行验证。对于输入验证,开发者可以通过注解或XML配置文件定义验证规则,然后在表单提交时自动执行。 ...

    struts配置元素详解

    Struts配置元素详解 在Java Web开发中,Struts框架是一个非常重要的MVC(Model-View-Controller)架构,它提供了强大的控制层解决方案。本文将深入解析Struts配置文件`struts-config.xml`中的各个核心元素及其用法...

    struts验证

    ### Struts验证详解 在Java Web开发中,Struts框架为开发者提供了强大的MVC架构支持。其中,数据验证是确保应用程序稳定性和用户体验的关键环节。本文将深入探讨Struts框架下的数据验证机制,包括如何使用`validate...

    Struts1.2中的validation验证框架的实现步骤

    ### Struts1.2中的Validation验证框架实现步骤详解 #### 一、环境配置与准备工作 在Struts1.2框架中实现验证功能首先需要完成环境配置。这包括添加必要的库文件(JAR包)、配置XML文件等。 ##### 1.1 添加...

    struts2 开发详解(1)

    ### Struts2 开发详解(1):Struts2.0环境的搭建及Eclipse平台下的开发 #### 1.1 什么是Web框架 随着互联网技术的快速发展,Web应用程序的需求日益增长,这促使开发者们寻找更高效、更灵活的方式来构建复杂的Web...

    struts1属性详解

    Struts 1是一个经典的MVC框架,用于构建Java Web应用程序。在Struts 1中,`Action`元素是`struts-config.xml`配置文件的核心部分,它定义了控制器的行为。以下是对`struts1.x_action`属性的详细解释: 1. **...

    验证框架,框架,资源

    ### 验证框架:Struts2验证机制详解 #### Struts2框架简介 Struts2是基于MVC(Model-View-Controller)设计模式的一种Java Web应用开发框架,它简化了Web应用程序的开发过程,提供了丰富的插件支持,并且易于与...

Global site tag (gtag.js) - Google Analytics