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: 是否去除前后空格. 默认为 truei) 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。
校验规则是这四个文件的总和。