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
原文地址:https://www.cnblogs.com/hacket/p/3089374.html