`

[原]Struts2校验框架

阅读更多

[标题]:[原]Struts2校验框架
[时间]:2009-7-27
[摘要]:校验框架配置、客户端校验
[关键字]:浪曦视频,Struts2应用开发系列,WebWork,Apache,validation
[环境]:struts-2.1.6、JDK6、MyEclipse7、Tomcat6
[作者]:Winty (wintys@gmail.com) http://www.blogjava.net/wintys

[正文]:
    Struts校验框架提供了一种不用编写代码,只需修改配置文件即可对输入进行校验的功能。代码方式校验,即重写validate()方法。实际应用中,validate()与校验框架一般只选其一

1、校验框架配置
    在RegisterAction.java相同目录新建校验框架配置文件RegisterAction-validation.xml。RegisterAction-validation.xml的DTD可以复制struts自带的示例struts2-mailreader-2.1.6中的DTD:

<!DOCTYPE validators PUBLIC
          "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
          "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd ">


xwork-validator-1.0.2.dtd:

<?xml version="1.0" encoding="UTF-8"?>

<!--
  XWork Validators DTD.
  Used the following DOCTYPE.
 
  <!DOCTYPE validators PUBLIC
          "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
          "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
-->


<!ELEMENT validators (field|validator)+>

<!ELEMENT field (field-validator+)>
<!ATTLIST field
    name CDATA #REQUIRED
>

<!ELEMENT field-validator (param*, message)>
<!ATTLIST field-validator
    type CDATA #REQUIRED
    short-circuit (true|false) "false"
>

<!ELEMENT validator (param*, message)>
<!ATTLIST validator
    type CDATA #REQUIRED
    short-circuit (true|false) "false"
>

<!ELEMENT param (#PCDATA)>
<!ATTLIST param
    name CDATA #REQUIRED
>

<!ELEMENT message (#PCDATA)>
<!ATTLIST message
    key CDATA #IMPLIED
>



RegisterAction-validation.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
          "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
          "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
 
 <validators>
 <!--  
     与field等价的validator
     <validator type="requiredstring">
         <param name="fieldName">name</param>
         <param name="trim">true</param>
         <message>name required</message>
     </validator>
     <validator type="stringlength">
         <param name="fieldName">name</param>
             <param name="trim">true</param>
             <param name="minLength">6</param>
             <param name="maxLength">10</param>
             <message>name length range : ${minLength} ~ ${maxLength}</message>
     </validator>
 -->    
     <field name="name">
         <field-validator type="requiredstring" >
             <param name="trim">true</param>
             <message>name required</message>
         </field-validator>
         <field-validator type="stringlength">
             <param name="trim">true</param>
             <param name="minLength ">6</param>
             <param name="maxLength">10</param>
             <message>name length range : ${minLength} ~ ${maxLength}</message>
         </field-validator>
     </field>
     
     <field name="age">
         <field-validator type="conversion" short-circuit="true" >
             <message>the field age conversion error</message>
         </field-validator>
         <field-validator type="int">
             <param name="min">1</param>
             <param name="max">150</param>
             <message>age range: ${min} ~ ${max}</message>
         </field-validator>
     </field>
     
     <field name="birthday">
         <field-validator type="required" >
             <message>birthday required</message>
         </field-validator>
         <field-validator type="date">
             <param name="min">2009-01-01</param>
             <param name="max">2009-12-31</param>
             <message>birthday range: ${min} ~ ${max}</message>
         </field-validator>
     </field>
     
     <field name="email">
         <field-validator type="email">
             <message>invalid email address</message>
         </field-validator>
     </field>
 </validators>


说明:
a.校验框架有两种校验方式:field和validator。
field校验:先指定需要校验的属性,再指定校验方式。validator校验:先指定校验方式,再指定需要校验的属性。两种方式是等价的。

field校验:
<field name="name">
    <field-validator type="requiredstring" >
        <param name="trim">true</param>
        <message>name required</message>
    </field-validator>
    <field-validator type="stringlength">
        <param name="trim">true</param>
        <param name="minLength">6</param>
        <param name="maxLength">10</param>
        <message>name length range : ${minLength} ~ ${maxLength}</message>
    </field-validator>
</field>

validator校验:
<validator type="requiredstring">
    <param name="fieldName" >name</param>
    <param name="trim">true</param>
    <message>name required</message>
</validator>
<validator type="stringlength">
    <param name="fieldName" >name</param>
    <param name="trim">true</param>
    <param name="minLength">6</param>
    <param name="maxLength">10</param>
    <message>name length range : ${minLength} ~ ${maxLength}</message>
</validator>

b.<field-validator type="requiredstring" >中的type及其对应的xwork类可以在xwork-2.1.2.jar/com.opensymphony.xwork2.validator.validators/default.xml 中查找到。
default.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
        "-//OpenSymphony Group//XWork Validator Config 1.0//EN"
        "http://www.opensymphony.com/xwork/xwork-validator-config-1.0.dtd">

<!-- START SNIPPET: validators-default -->
<validators>
    <validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>
    <validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>
    <validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>
    <validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/>
    <validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/>
    <validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/>
    <validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/>
    <validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>
    <validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>
    <validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>
    <validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/>
    <validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>
    <validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>
    <validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>
    <validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/>
    <validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/>
</validators>
<!--  END SNIPPET: validators-default -->


c. 对于校验<field-validator type="requiredstring" >:String用requiredstring,其它类型用required。
d. 验证错误将默认产生FieldError。
e. short-circuit="true" : 一个校验失败,是否是继续执行后续校验。
f. 对于相同属性的FieldError,validate()方法中的验证和RegisterAction-validation.xml中的验证都会执行,并且FieldError都会显示。
执行顺序: RegisterAction-validation.xml => validate()。


2、特定于业务逻辑的局部校验:
对于struts.xml中<action>的method="register"指定的业务方法register(),使用校验RegisterAction-register-validation.xml(与RegisterAction.java在同一目录下)。同时,RegisterAction-validation.xml会被执行。执行顺序:  RegisterAction-validation.xml => RegisterAction-register-validation.xml

3、Struts2客户端校验
    设置struts标签<s:form>中validate="true"。这样就会根据RegisterAction-validation.xml生成页面Javascript,在客户端执行校验。
 
 注意:
 a.struts标签不能使用simple主题
 b.Struts2客户端校验功能较弱,一般不用。

4、FieldError和ActionError的实现
a.真正存放field级别错误信息的对象是LinkedHashMap。
b.该LinkedHashMap的key是String类型的,value是ArrayList类型 ,所以同一个key可以对应多个错误消息。
c.对于Action级别的错误信息,实际上是放置在ArrayList中的。
    
[参考资料]:
    《浪曦视频之Struts2应用开发系列》

[附件]:
    源代码 : struts_ValidationFramework.zip

分享到:
评论

相关推荐

    Struts2校验框架应用

    Struts2作为一款流行的Java Web开发框架,提供了一套强大的校验框架,使得开发者能够方便地对用户输入数据进行验证,确保数据的准确性和安全性。本文将深入探讨Struts2校验框架的应用,包括其核心概念、配置方式、...

    struts2校验框架使用心得.txt

    ### Struts2校验框架使用心得 #### 一、Struts2校验框架概述 Struts2是一款基于Java的企业级Web应用开发框架,它能够帮助开发者构建出结构清晰、易于维护的应用程序。其中,Struts2提供的校验框架是其核心特性之一...

    struts2校验框架

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

    Struts2 校验器

    Struts2的校验框架是基于Apache Commons Validator库的,它允许开发者定义一系列的验证规则来检查用户的输入。这些规则可以是简单的数据类型检查,如非空、长度限制,也可以是复杂的业务逻辑校验。校验过程通常分为...

    struts2 校验框架

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

    Struts2自定义校验框架

    下面将详细介绍Struts2自定义校验框架的相关知识点。 1. **Struts2验证框架概述** Struts2的验证框架主要负责处理用户提交的数据,进行验证,并在验证失败时显示错误消息。它支持两种验证方式:基于注解的验证...

    struts2校验器与校验框架精彩学习笔记

    本学习笔记主要探讨了Struts2中的校验器(Validator)和校验框架,帮助开发者理解如何有效地实现数据验证,确保应用程序的健壮性。 首先,我们来看Struts2的校验框架。这个框架提供了强大的功能,可以对用户输入...

    struts2.0的数据校验框架struts2.0的数据校验框架

    struts2.0的数据校验框架struts2.0的数据校验框架struts2.0的数据校验框架struts2.0的数据校验框架

    使用Struts2校验框架完成输入校验

    2、用户名只能使用数字或者字母,长度为6~20之间; 3、密码、确认密码必须是数字和字母,长度为6~20之间; 4、密码、确认密码必须相同; 5、收入必须在0.001~10000.000之间; 6、年龄必须是整数且必须在0~120...

    Struts2输入校验总结

    综上所述,Struts2的输入校验机制不仅支持基本的手动校验,还提供了高度可配置和扩展的验证框架,使得开发者能够根据应用的具体需求,灵活地实现各种校验逻辑,从而提升应用程序的质量和用户体验。

    Struts2的校验框架

    Struts2是一个强大的Java Web应用程序开发框架,它在MVC(模型-视图-控制器)设计模式的基础上提供了许多优秀特性,其中包括一个强大的校验框架。这个框架使得开发者能够有效地验证用户输入,确保数据的准确性和安全...

    Struts 2校验框架的应用

    (2):对密码校验的规则是用户不能为空,且只能是数字,长度为8到20之间。 (3):年龄的校验规则是必须是整数,且在1到120之间。 (4):生日的校验规则是必须在1950-1-1到1990-1-1之间。 (5):所有提示信息均要...

    struts1校验框架

    校验框架是Struts1中的一个重要组件,用于验证用户输入数据的有效性和完整性。 Struts1的校验框架主要分为两部分:ActionForm和Validator。ActionForm对象用于接收和封装用户从视图层提交的数据,而Validator则负责...

    struts2验证框架简单实例

    Struts2是一个强大的MVC(模型-视图-控制器)框架,被广泛应用于Java Web开发中。在Struts2框架中,验证框架是其一个重要组成部分,用于确保输入数据的准确性和完整性,从而防止因无效数据导致的程序异常或错误。本...

    struts框架及校验框架详解

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

Global site tag (gtag.js) - Google Analytics