`
longzijian
  • 浏览: 39383 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Struts2学习笔记(4)--校验构架

阅读更多

 

当校验逻辑不是十分复杂时,可以用xml进行校验;逻辑十分复杂是,可以通过validate()进行校验

分类:

【字段校验】
 ---- 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/fieldexpression  检查某个布尔表达式的值是否为true,后者绑定到某个字段上
     参数expression

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">           
            <param name="expression">name.equals(desc)</param>  
            <message>name not the same as desc</message>  
        </validator>
   OR
        <validator type="expression>
           <param name="expression">foo gt bar</param>
           <message>foo必须大于bar.</message>
        </validator>
   OR
        <validator type="expression">
           <param name="expression">email.equals(email2)</param>
           <message>Email不等于email2</message>
        </validator>
   OR
        <validator type="expression" short-circuit="true">
           <param name="expression">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("username")[0] 返回一个所有名为username的数组
 //var usernameValue = document.getElementByName("username")[0].value

 var usernameValue = document.getElementByID("username").value;
 if( usernameValue.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().put("...","...");的方法,添加fielderror
因为getFieldError()返回的是一个fieldErrorMap的副本。

分享到:
评论

相关推荐

    struts2-core.jar

    struts2-core-2.0.1.jar, struts2-core-2.0.11.1.jar, struts2-core-2.0.11.2.jar, struts2-core-2.0.11.jar, struts2-core-2.0.12.jar, struts2-core-2.0.14.jar, struts2-core-2.0.5.jar, struts2-core-2.0.6.jar,...

    struts2-spring-plugin-2.3.15.2.jar ; struts2-json-plugin-2.3.16.3.jar

    struts2-spring-plugin-2.3.15.2.jar ; struts2-json-plugin-2.3.16.3.jarstruts2-spring-plugin-2.3.15.2.jar ; struts2-json-plugin-2.3.16.3.jar

    struts2-json-plugin-2.3.24-API文档-中文版.zip

    赠送jar包:struts2-json-plugin-2.3.24.jar; 赠送原API文档:struts2-json-plugin-2.3.24-javadoc.jar; 赠送源代码:struts2-json-plugin-2.3.24-sources.jar; 赠送Maven依赖信息文件:struts2-json-plugin-...

    struts2-struts1-plugin-2.1.6.jar

    struts2-struts1-plugin-2.1.6.jar

    struts2学习笔记1-HelloWorld项目

    本篇学习笔记将引导我们从零开始,通过一个简单的"HelloWorld"项目,了解Struts2的基础知识。 首先,我们需要在本地环境中搭建Struts2的开发环境。这包括安装JDK、配置Java环境变量、下载Apache Struts2的最新版本...

    Struts s2-016 s2-017 补丁

    本补丁是针对 struts2-core-2.0.11.jar 的修改, 把文件中 bin下的文件直接copy到 web-inf/classes下, 重启web server, 就可解决问题(代码修改采用 jason.zhou 的方案, 做了一点改动), 源码在压缩文件的src目录下

    Struts2入门笔记1-4

    标题"Struts2入门笔记1-4"暗示了这是一个关于Struts2基础知识的学习过程,涵盖了从基础到进阶的内容,可能包括了Struts2的核心概念、配置、拦截器以及实际应用等。 描述中提到,Struts2的控制实现是通过Filter来...

    struts2-ssl-plugin-1.2.1.jar

    struts2-ssl-plugin-1.2.1.jar

    struts2-struts1-plugin-2.1.8.1.jar

    最新struts2-struts1-plugin-2.1.8.1.jar

    struts2 最新漏洞 S2-016、S2-017修补方案 .docx

    Struts2 最新漏洞 S2-016、S2-017 修补方案 Struts2 是一个基于 Java 的 Web 应用程序框架,由 Apache 软件基金会维护。最近,Struts2 发生了两个严重的漏洞,分别是 S2-016 和 S2-017,这两个漏洞可能会导致攻击者...

    json-lib-2.1.jar和struts2-json-plugin-2.1.8.1.jar

    `struts2-json-plugin-2.1.8.1.jar` 则是Struts 2框架的一个插件,主要用于增强Struts 2对JSON的支持。Struts 2是一款非常流行的MVC(Model-View-Controller)框架,用于构建企业级的Java Web应用程序。这个插件允许...

    struts2-dojo-plugin-2.2.1.jar

    Struts2-dojo-plugin-2.2.1.jar 是一个针对Apache Struts2框架的扩展插件,主要用于增强Struts2应用的用户界面交互性,特别是通过集成Dojo JavaScript库来提供丰富的AJAX功能和用户体验。这个插件是Struts2与Dojo ...

    struts2-json-plugin-2.3.8.jar

    Struts2 JSON Plugin是针对Apache Struts2框架的一个重要组件,版本为2.3.8。这个插件主要的功能是让Struts2应用程序能够轻松地处理JSON(JavaScript Object Notation)数据格式,使得Web应用可以方便地进行JSON序列...

    struts-spring-other-lib 等jar包

    struts-spring-other-lib 等jar包struts-spring-other-lib 等jar包struts-spring-other-lib 等jar包struts-spring-other-lib 等jar包struts-spring-other-lib 等jar包struts-spring-other-lib 等jar包struts-spring-...

    struts2学习笔记.doc

    ### Struts2学习笔记知识点概览 #### 一、环境搭建 **1.1 Struts2简介** - **Struts2概述**:Struts2是一个开源的MVC框架,它结合了Struts 1.x、WebWork和其他一些框架的优点。Struts2的主要目标是简化Web应用程序...

    struts-config.xml struts标准配置文件 struts-config

    struts-config.xml struts标准配置文件 struts-config

    Struts2开发常用jar包

    包含struts2-core-2.5.10.1.jar,struts2-jfreechart-plugin-2.5.10.1.jar,struts2-json-plugin-2.5.10.1.jar,struts2-junit-plugin-2.5.10.1.jar,struts2-bean-validation-plugin-2.5.10.1.jar,struts2-cdi-...

    struts2-dojo-plugin-2.3.4 jar

    struts2-dojo-plugin-2.3.4 jar 日期控件的jar包 需要的自行下载

    Struts2-3.24集合jar

    struts2-config-browser-plugin-2.3.24.jar, struts2-core-2.3.24.jar, struts2-jasperreports-plugin-2.3.24.jar, struts2-jfreechart-plugin-2.3.24.jar, struts2-pell-multipart-plugin-2.3.24.jar, struts2-...

    Struts2学习案例--------入门篇

    输出Hello World 使用到struts2标签和jstl表达式 2、 URL:http://localhost:8080/struts100515 输入用户名XXX ------&gt; 提交 ,显示 你好 XXX 使用ONGL表达式 3、 URL:...

Global site tag (gtag.js) - Google Analytics