zoukankan      html  css  js  c++  java
  • struts2验证(XML)

    1、配置验证的xml文件-全局的验证所有的方法

      a) 验证的xml文件的规范在xwork-core-2.3.1.1.jar包下的:xwork-validator-1.0.3.dtd

    1 <!DOCTYPE validators PUBLIC
    2           "-//Apache Struts//XWork Validator 1.0.3//EN"
    3           "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">

      b) 验证文件的命名

    a) 该文件需要和action类放在同一个包下,文件的取名应遵守ActionClassName-validation.xml规则,其中ActionClassName为action的简单类名,-validation为固定写法。

     例如:如果Action类为cn.itcast.validate.ValidateXmlAction. 那么该文件的取名应为:ValidateXmlAction-validation.xml

        b) 在这个校验文件中,对action中字符串类型的username属性进行验证, 首先要求调用trim()方法去掉空格,然后判断用户名是否为空。

      c) ValidateXmlAction-validation.xml为文件的配置解释

        <validators>: 根元素

        <field>:指定action中要校验的属性,name属性指定将被验证的表单字段的名字

        <field-validator>:指定校验器, type 指定验证规则,上面指定的校验器requiredstring是由系统提供的,系统提供了能满足大部分验证需求的校验器,

                  这些校验器的定义可以在xwork-2.x.jar中的com.opensymphony.xwork2.validator.validators下的default.xml中找到。

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE validators PUBLIC
     3         "-//Apache Struts//XWork Validator Definition 1.0//EN"
     4         "http://struts.apache.org/dtds/xwork-validator-definition-1.0.dtd">
     5 <!--
     6          validators:声明验证规则
     7              *name:验证规则的唯一名字
     8              *class:验证规则对应类的完整路径
     9 -->
    10 <!-- START SNIPPET: validators-default -->
    11 <validators>
    12     <validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>
    13     <validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>
    14     <validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>
    15     <validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/>
    16     <validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/>
    17     <validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/>
    18     <validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/>
    19     <validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>
    20     <validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>
    21     <validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>
    22     <validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/>
    23     <validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>
    24     <validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>
    25     <validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>
    26     <validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/>
    27     <validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/>
    28 </validators>
    29 <!--  END SNIPPET: validators-default -->

        <param>:子元素可以向验证程序传递参数

        <message>:子元素为校验失败后的提示信息,如果需要国际化,可以为message

                           指定key属性,key的值为属性文件中的key。

      d) ValidateXmlAction-validation.xml配置

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE validators PUBLIC
     3           "-//Apache Struts//XWork Validator 1.0.3//EN"
     4           "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
     5 <validators>
     6     <!-- 
     7         field:指定action中要校验的属性
     8             * name:指定将被验证的表单字段的名字
     9      -->
    10     <field name="username">
    11         <!-- 
    12             field-validator:指定验证规则
    13                 * type:指定验证规则的名称
    14          -->
    15         <field-validator type="requiredstring">
    16             <!-- 
    17                 param:向验证器传递的参数
    18                     * requiredstring验证器的参数是"trim",设置为"true"的作用是去空格
    19              -->
    20             <param name="trim">true</param>
    21             <!-- 
    22                 message:验证失败时,提示的错误信息
    23                     * <![CDATA[]]>:保证按原文输出
    24                     * 里面的文本:错误提示信息
    25              -->
    26             <message><![CDATA[用户名不能为空!]]></message>
    27         </field-validator>
    28     </field>
    29     <field name="psw">
    30         <field-validator type="requiredstring">
    31             <param name="trim">true</param>
    32             <message><![CDATA[密码不能为空!]]></message>
    33         </field-validator>
    34         <!-- 使用正则表达式验证规则来做"regex" -->
    35         <field-validator type="regex">
    36             <param name="trim">true</param>
    37             <param name="expression"><![CDATA[^[0-9a-zA-Z]{6,12}$]]></param>
    38             <message><![CDATA[密码的长度必须在6至12之间!]]></message>
    39         </field-validator>
    40     </field>
    41 </validators>

    2、当校验文件的取名为ActionClassName-validation.xml时,会对 action中的所有处理方法实施输入验证。

       如果你只需要对action中的某个action方法实施校验,那么,校验文件的取名应为:ActionClassName-ActionName-validation.xml,其中ActionName为struts.xml中action的名称

    例如:在实际应用中,常有以下配置:

     1 <action name="user_*" class="cn.zengfansheng.action.UserAction" method="{1}">
     2 
     3   <result name="success">/WEB-INF/page/message.jsp</result>
     4 
     5   <result name="input">/WEB-INF/page/addUser.jsp</result>
     6 
     7 </action>
     8 
     9 UserAction中有以下两个处理方法:
    10 
    11 public String add() throws Exception{
    12 
    13    ....
    14 
    15 }
    16 
    17 public String update() throws Exception{
    18 
    19    ....
    20 
    21 }

    要对add()方法实施验证,校验文件的取名为: UserAction-user_add-validation.xml

    要对update()方法实施验证,校验文件的取名为: UserAction-user_update-validation.xml

    ValidateXmlAction-validateXmlAction_login-validation.xml.xml:对ValidateXmlAction中的post方法进行验证

    3、Struts2 内建的验证程序

      a) required: 确保某给定字段的值不是空值 null

      b) requiredstring: 确保某给定字段的值既不是空值 null, 也不是空白

        •trim 参数. 默认为 true, 表示 struts 在验证该字段值之前先剔除前后空格. 

      c) stringlength: 验证一个非空的字段值是不是有足够的长度 

    •minLength: 相关字段的最小长度. 若没有给出这个参数, 该字段将没有最小长度限制
    •maxLength:相关字段的最大长度. 若没有给出这个参数, 该字段将没有最大长度限制
    •trim: 在验证之前是否去除前后空格

      d) int: 检查给定字段的值是否可以被转换为一个整数

    •min: 相关字段的最小值. 若没给出这个参数, 该字段将没有最小值限制
    •max: 相关字段的最大值. 若没给出这个参数, 该字段将没有最大值限制

      e) date: 确保某给定日期字段的值落在一个给定的范围内

    •max:相关字段的最大值. 若没给出这个参数, 该字段将没有最大值限制
    •min:相关字段的最小值. 若没给出这个参数, 该字段将没有最小值限制

      f) email: 检查给定 String 值是否是一个合法的 email

      g) url: 检查给定 String 值是否是一个合法的 url

      h) regex: 检查某给定字段的值是否与一个给定的正则表达式模式相匹配

    •expresssion*: 用来匹配的正则表达式
    •caseSensitive: 是否区分字母的大小写. 默认为 true
    •trim: 是否去除前后空格. 默认为 true

      i) conversion(转换校验器,指定在类型转换失败时,提示的错误信息)

      j) visitor(用于校验action中的复合属性,它指定一个校验文件用于校验复合属性中的属性)

      k) expression(OGNL表达式校验器,expression参数指定ognl表达式,该逻辑表达式基于ValueStack进行求值,返回true时校验通过,否则不通过,该校验器不可用在字段校验器风格的配置中)

      l) double(双精度浮点数校验器,要求field的双精度浮点数必须在指定范围内,min指定最小值,max指定最大值)

       校验器案例:

    1 required  必填校验器
    2 <field-validator type="required">
    3        <message>性别不能为空!</message>
    4 </field-validator>
    1 requiredstring  必填字符串校验器
    2 <field-validator type="requiredstring">
    3        <param name="trim">true</param>
    4        <message>用户名不能为空!</message>
    5 </field-validator>
    1 stringlength:字符串长度校验器
    2 <field-validator type="stringlength">
    3     <param name="maxLength">10</param>
    4     <param name="minLength">2</param>
    5     <param name="trim">true</param>
    6     <message><![CDATA[产品名称应在2-10个字符之间]]></message>
    7 </field-validator>
    1 int:整数校验器
    2 <field-validator type="int">
    3     <param name="min">1</param>
    4     <param name="max">150</param>
    5     <message>年龄必须在1-150之间</message>
    6 </field-validator>
    1 字段OGNL表达式校验器
    2 <field name="imagefile">
    3     <field-validator type="fieldexpression">
    4         <param name="expression"><![CDATA[imagefile.length() <= 0]]></param>
    5         <message>文件不能为空</message>
    6     </field-validator>
    7 </field>
    1 email:邮件地址校验器
    2 <field-validator type="email">
    3     <message>电子邮件地址无效</message>
    4 </field-validator>
    1 regex:正则表达式校验器
    2 <field-validator type="regex">
    3      <param name="expression"><![CDATA[^13\d{9}$]]></param>
    4      <message>手机号格式不正确!</message>
    5 </field-validator>

    4、基于XML校验的一些特点

      当为某个action提供了ActionClassName-validation.xml和ActionClassName-ActionName-validation.xml两种规则的校验文件时,系统按下面顺序寻找校验文件:

      1。AconClassName-validation.xml

      2。ActionClassName-ActionName-validation.xml

    系统寻找到第一个校验文件时还会继续搜索后面的校验文件,当搜索到所有校验文件时,会把校验文件里的所有校验规则汇总,然后全部应用于处理方法的校验。

    如果两个校验文件中指定的校验规则冲突,则只使用后面文件中的校验规则。

    当action继承了另一个action,父类action的校验文件会先被搜索到。假设UserAction继承BaseAction, UserAction在struts.xml的配置如下:

    <action name="user" class="cn.itcast.action.UserAction" method="{1}">

      .....

    </action>

    访问上面名为user的action,系统先搜索到BaseAction-validation.xml, BaseAction-user-validation.xml,接着搜索到UserAction-validation.xml, UserAction-user-validation.xml。

    校验规则是这四个文件的总和。

     

    by hacket
  • 相关阅读:
    Oracle 查询主外键关联
    maven
    LOG4J
    转换maven 项目为web 项目
    Iframe 高度自适应的问题
    JS 之CLASS类应用
    不要自己决定如何设计,遵从客户和客观需要
    私服搭建Nexus
    python经典算法题:无重复字符的最长子串
    Python输出hello world(各行命令详解)
  • 原文地址:https://www.cnblogs.com/hacket/p/3089374.html
Copyright © 2011-2022 走看看