`
ychw365
  • 浏览: 54395 次
  • 性别: Icon_minigender_1
  • 来自: 长春
最近访客 更多访客>>
社区版块
存档分类
最新评论

struts2校验框架

阅读更多
struts2校验框架

分类:
【字段校验】
---- field-validator
---- 字段优先,我去校验谁(字段),我用谁(校验器)来校验
【非字段校验】
---- validator
---- 校验器优先,我用谁(校验器)来校验,我去校验谁(字段)
****** 这两种只是 表现形式 不同,底层是相同的,都是把错误信息放到fielderror中
命名:需要校验的Action名 + -validation.xml
位置:要和需要校验的Action放在同一目录下

### 只对action中的某个方法进行校验
-1-
     需要校验的Action名 + -方法名 + -validation.xml
                                      |
                       对应xml中<action>的属性的name值

如: RegisterAction-add-validation.xml
       --对应 /add.action   --对RegisterAction中的add()方法进行校验
-2-
     在不需要进行验证的方法加上annotation,即在方法前加上@SkipValidation。
-3-
   <action name=...>
        <interceptor-ref name="defaultStack">  
             <param name="validation.excludeMethods">*</param>  
             <param name="validation.includeMethods">需要验证的方法名称,以逗号分隔</param>
        </interceptor-ref> 
   </action>

### 校验顺序

    如果既提供了RegisterAction-validation.xml,又提供了RegisterAction-add-validation.xml
    Struts2会先校验RegisterAction-validation.xml,然后再去校验RegisterAction-add-validation.xml
    这两个都会被调用

### 建议:

    当有多个逻辑方法时,就不要提供RegisterAction-validation.xml
    只提供相应方法的xml文件,如:RegisterAction-execute-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 或 validate
name必须提供
1个 field 表示对一个属性的一次校验
    <field name="username">
<field>中至少有一个或多个<field-validator>
1个<field-validator>表示对它校验的一种方式
type类型必须提供  类型=requiredstring 表示username必填
验类型来自于 xwork-2.0.4.jar/com/opensymphony/xwork2/validator/validators/deault.xml
short-circuit:表示短路,默认false若设为true,表示:这个验证器失败了,就不再执行后面的验证器了
        <field-validator type="requiredstring" short-circuit="true">
     
  <field-validator>中有若干个(0 ~ N)<param>子元素和一个<message>子元素
  这里的trim对应到requiredstring对应类RequiredStringValidator中的setTrim(boolean trim)方法设置的属性doTrim
  requiredstring这种校验类型,doTrim默认设为true,所以这里写与不写trim设为true都是一样的
              <param name="trim">true</param>
            <message>用户名不能为空!</message>
       </field-validator>
验证字符串长度
        <field-validator type="stringlength">
             <param name="minLength">6</param>   最小长度,默认-1
             <param name="maxLength">10</param>  最大长度,默认-1
             <message>用户名应该在 ${minLength} 和 ${maxLength} 之间</message>
 
  也可以用国际化的方式:<message key="error.password.required"/>
        </field-validator>
    </field>
@@@ 验证必填&字符串长度 @@@@@@@@@@@@@@@@@@@@@@@
    <field name="password">
       <field-validator type="requiredstring">
            <message>密码不能为空</message>
       </field-validator>
            <field-validator type="stringlength">
            <param name="minLength">6</param> 
            <param name="maxLength">10</param>
            <message>密码应该在 ${minLength} 和 ${maxLength} 之间</message>
       </field-validator>
    </field>
@@@ 验证数字 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    <field name="age">
       <field-validator type="required">
           <message>年龄不能为空</message>
       </field-validator>
       <field-validator type="int">
           <param name="min">1</param> 
           <param name="max">150</param>
           <message>年龄应该在 ${min} 和 ${max} 之间</message>
       </field-validator>
    </field>
@@@ 验证日期 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    <field name="birthday">                类型为requiredString用于校验String类型必填
       <field-validator type="required">  类型为required用于验证String以外的类型必填
           <message>生日不能为空</message>
       </field-validator>
       <field-validator type="date">
           <param name="min">2001-01-01</param> 
           <param name="max">2008-08-08</param>
           <message>生日应该在 ${min} 和 ${max} 之间</message>
        </field-validator>
    </field>
</validators>

========================================
default.xml中提供的校验类型:
========================================
required           用于检查值是否为null
requiredstring     用于检查string是否为null或空,   参数trim,可在验证前对字符串执行trim操作
stringlength       检查string的长度是否在某个范围, 参数trim,minLength,maxLength
int/double         检查某值是否为int/double且在某个范围,参数min,max;minInclusive,maxInclusive,minExclusive,maxExclusive
date               检查date的范围,                 参数min,max
email              检查输入是否为email格式
url                检查输入是否为url格式
conversion         检查是否将出现数据转换错误
expression_r_r_r/fieldexpression_r_r_r  检查某个布尔表达式的值是否为true,后者绑定到某个字段上
     参数expression_r_r_r
visitor            使用预定义的validators进行验证,参数context
regex 检查是否能匹配到正则表达式,                 参数regex

@@@@@@@@@@@@@@
正则表达式验证:
@@@@@@@@@@@@@@
     <field name="bar2">
          <field-validator type="regex">
               <param name="regex">[0-9],[0-9]</param>
               <message>
                    bar2的值必须是"x, y"这样的格式 并且x、y都在0 ~ 9的范围内
               </message>
     </field-validator>
@@@@@@@@@
   URL 
@@@@@@@@@
    <field name="url">           
        <field-validator type="required" short-circuit="true">              
            <message>你需要输入一个URL。</message> 
        </field-validator> 
         
        <field-validator type="url" short-circuit="true">               
            <message>URL错误。</message> 
        </field-validator> 
    </field>
@@@@@@@@@@@@
   EMail 
@@@@@@@@@@@@
   <field name="mail"> 
        <field-validator type="required"> 
            <message>你需要输入一个电子邮件的地址。</message> 
        </field-validator>          
        <field-validator type="email"> 
            <message>非法的email格式。</message> 
        </field-validator> 
    </field>
@@@@@@@@@@@@
   表达式 
@@@@@@@@@@@@
        <validator type="expression_r_r_r">          
            <param name="expression_r_r_r">name.equals(desc)</param> 
            <message>name not the same as desc</message> 
        </validator>
   OR
        <validator type="expression_r_r_r>
           <param name="expression_r_r_r">foo gt bar</param>
           <message>foo必须大于bar.</message>
        </validator>
   OR
        <validator type="expression_r_r_r">
           <param name="expression_r_r_r">email.equals(email2)</param>
           <message>Email不等于email2</message>
        </validator>
   OR
        <validator type="expression_r_r_r" short-circuit="true">
           <param name="expression_r_r_r">email.startsWith('mark')</param>
           <message>Email没有以mark开始。</message>
        </validator>



================
== 非字段校验 ==
================

<?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>

    <validate type="requiredstring"> 用谁来校验
去校验谁
validate中的第一个param的name属性永远都是固定的fieldName,对应与要去校验的字段名
         <param name="fieldName">username</param>
                <message>用户名为必填</message>
解释:用requiredstring校验器去校验username字段,如果出错,显示<message>中的信息
    </validate>
    <validate type="stringlength">
         <param name="fieldName">username</param>
         <param name="minLength">6</param>
         <param name="maxLength">10</param>
         <message>用户名必须在 ${minLength} 和 ${maxLength} 之间</message>
    </validate>


=====================================
客户端校验--功能弱,死板(不建议使用)
=====================================
1.
Struts2的<s:form>的theme一定不能设置为simple
2.
将<s:form>的validte属性设置为true
3.
Struts2的客户端校验是基于***-validation.xml中的设置生成js代码

==========================
自定义客户端校验
==========================
<s:form action="register" theme="simple" onsubmit="return validate();">
js:
function validate() {
//document. getElementByName_r("username")[0] 返回一个所有名为username的数组
//var usernamue = document. getElementByName_r("username")[0].value
var usernamue = document. getElementByID_r("username").value;
if( usernamue.length == 0 ) {
  alert("Username should not be blank!");
  return false;
}
...
}

========
= 补充 =
========
1.
集合里面存放的并不是对象,而是对象的引用
如:
List list = new ArrayList();
Map map = new LinkedHashMap()'
map.put("1", list);   //存放的是映射
list.add("string1");
list.add("string2");
list.add("string3");

2.
如果既有xml校验,又有validate()校验
将先校验xml,然后进行validate()校验
然后将所有的错误添加进fielderror

3.
真正存放field级别错误信息的对象是LinkedHashMap
该LinkedHashMap的key是String类型的,value是ArrayList类型的
对于Action级别的错误信息,实际上是放置在ArrayList中的
4.
不能通过
this. getFieldError_r().put("...","...");的方法,添加fielderror
因为 getFieldError_r()返回的是一个fieldErrorMap的副本。
分享到:
评论

相关推荐

    struts2验证框架

    Struts2 验证框架详解 Struts2 验证框架是基于 Java 语言的 Web 应用程序框架,提供了一个强大的验证机制,以确保用户输入的数据满足业务逻辑的要求。在 Struts2 中,验证机制是通过 validator 来实现的,该机制...

    Struts2校验框架应用

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

    struts2校验框架使用心得.txt

    其中,Struts2提供的校验框架是其核心特性之一,能够有效地进行表单验证,并且支持多种验证方式。 #### 二、配置Struts2框架 为了使用Struts2框架,首先需要在项目的`web.xml`文件中配置过滤器。下面的示例展示了...

    struts2验证框架示例

    在Struts2中,验证框架是其核心特性之一,它允许开发者对用户输入的数据进行校验,确保数据的完整性和安全性。这个“struts2验证框架示例”提供了深入理解并实际操作Struts2验证功能的机会。 首先,让我们了解一下...

    struts2验证框架简单示例

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

    struts2验证框架简单实例

    在Struts2框架中,验证框架是其一个重要组成部分,用于确保输入数据的准确性和完整性,从而防止因无效数据导致的程序异常或错误。本实例将带你深入理解Struts2验证框架的使用,以及在实际操作中可能遇到的问题和解决...

    struts2 校验框架

    Struts2的校验框架基于Apache Commons Validator,提供了多种预定义的验证器类型以及自定义验证器的功能。这些验证器可以在配置文件中或代码中定义,用于检查表单字段的有效性。 #### 三、示例分析 ##### 1. 配置...

    [原]Struts2校验框架

    Struts2的验证框架主要负责在用户提交表单时,对输入数据进行检查。它通过定义验证规则,如非空、长度限制、格式验证等,来防止无效或恶意的数据进入系统。验证框架可以减少后端业务逻辑中的验证代码,提高代码的...

    struts2 验证框架

    Struts2验证框架是Java开发中的一个关键组件,主要用于处理Web应用中的用户输入验证。它提供了灵活且强大的机制,确保用户提交的数据符合预期格式和业务规则。Struts2的验证框架是基于Action类和XML配置文件的,可以...

    Struts2 验证框架

    验证框架是Struts2中的一个重要组成部分,用于处理用户输入的数据验证。在这个框架中,验证逻辑与业务逻辑分离,使得代码更易于管理和扩展。 在Struts2验证框架中,主要有两种验证方式:客户端验证和服务器端验证。...

    struts2验证框架的使用和扩展

    在Struts2中,验证框架是其核心特性之一,它负责确保用户输入的数据符合预定义的规则,从而保证数据的准确性和安全性。本文将深入探讨Struts2验证框架的使用和扩展。 1. **Struts2验证框架基础** - **Action与...

    Struts2自定义校验框架

    Struts2提供了内置的验证框架,允许开发者自定义校验规则,以满足特定业务需求。下面将详细介绍Struts2自定义校验框架的相关知识点。 1. **Struts2验证框架概述** Struts2的验证框架主要负责处理用户提交的数据,...

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

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

Global site tag (gtag.js) - Google Analytics