使用验证框架
1、定义一个xml文件,位置和需要执行校验的类位置一致,名称定义规则为
类名称-validation.xml 类似于validate方法
类名称-请求地址-validation.xml 类似于validateAdd方法
例如目前需要针对UserAction进行服务器端数据校验,则xml文件和UserAction类文件的位置相同
这里是针对 add方法的校验,则xml文件名称为UserAction-user_add-validation.xml
2、给xml文件引入dtd说明,可以参照struts2-core.jar中/xwork-validator-1.0.3.dtd
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator 1.0.3//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
3、在UserAction-user_add-validation.xml中定义校验规则--需要针对哪个属性执行什么校验
定义方法有2种:字段优先和非字段优先
这两种写法没有什么本质区别,但是从可读性的角度上说,建议优先考虑使用字段优先
校验子定义在struts2-core.jar的中/com/opensymphony/xwork2/validator/validators/default.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator 1.0.3//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<validators>
<field name="username">采用字段优先的定义方法,所以首先说明针对哪个属性进行校验
<field-validator type="requiredstring"> 说明需要进行什么校验,具体的校验子的名称定义在default.xml中
<message>用户名称不能为空!</message> 默认的报错信息
</field-validator>
</field>
</validators>
4、在<action>的配置中必须定义<result name="input">,用于说明所使用的校验报错页
必填验证required
验证null,要求必须填写,用于针对对象类型属性,如果使用简单类型则失效,因为默认值
<field name="age">
<field-validator type="required">
<message>年龄必须填写!</message>
</field-validator>
</field>
必须字串验证requiredstring
验证null和空串,默认自动使用trim()方法
<field name="username">
<field-validator type="requiredstring">
<message>用户名称不能为空!</message>
</field-validator>
</field>
整型数据范围验证int/short/long
属性非空时执行范围验证,其中参数min用于定义最小值,max用于定义最大值,可以只定义一个方向,允许等于
<field name="age">
<field-validator type="int">
<param name="min">18</param>
<param name="max">65</param>
<message>年龄应该在${min}到${max}之间!</message>
</field-validator>
</field>
浮点数范围验证double
参数 minInclusive maxInclusive 允许等于
minExclusive maxExclusive 不允许等于
可以自行搭配使用
<field name="salary">
<field-validator type="double">
<param name="minInclusive">1000</param>
<param name="maxExclusive">10000</param>
<message>工资额度只能在1000到10000之间!</message>
</field-validator>
</field>
日期范围验证date
参数min和max
<field name="hiredate">
<field-validator type="date">
<param name="min">1989-2-3</param>
<param name="max">2018-4-5</param>
<message>入职日期应该在1989-2-3到${max}之间!</message>
</field-validator>
</field>
字段表达式验证fieldexpression
参数expression用于定义一个和字段相关的OGNL表达式
<field name="password">
<field-validator type="fieldexpression">
<param name="expression">
<![CDATA[password==repassword]]>
</param>
<message>两次输入口令必须一致!</message>
</field-validator>
</field>
数据类型转换验证conversion
数据类型转换失败的默认报错信息为:Invalid field value for field "字段名称"
<field name="age">
<field-validator type="conversion">
<message>数据格式错误!</message>
</field-validator>
</field>
去除默认的报错信息
1、配置常量,说明全局资源文件名称
struts.custom.i18n.resources=testmessages,testmessages2
sturts.xml <constant name="struts.custom.i18n.resources" value="msgs"/>
2、定义对应的全局的资源文件 src/msgs.properties
对应的key值可以在struts2-core.jar中查找 /com/opensymphony/xwork2/xwork-messages.properties
3、在properties文件中定义
xwork.default.invalid.fieldvalue=
注意等号后面没有任何内容,目的在于不显示任何报错信息,具体的格式错误报错使用conversion实现
新的问题:
<field name="age">
<field-validator type="conversion">
<message>数据格式错误!</message>
</field-validator>
<field-validator type="required">
<message>年龄必须填写!</message>
</field-validator>
两个报错信息都显示,不符合一般的使用习惯,针对这个问题,验证框架提供了短路校验的支持,也就是说上面的校
验没有通过则后续校验不执行
如何实现短路校验?short-circuit
<field name="age">
<field-validator type="conversion" short-circuit="true">
<message>数据格式错误!</message>
</field-validator>
<field-validator type="required">
<message>年龄必须填写!</message>
</field-validator>
字串长度校验stringlength
参数minLength和maxLength,不区分中英文
<field name="username">
<field-validator type="stringlength">
<param name="minLength">6</param>
<param name="maxLength">20</param>
<message>名称应该在6到20个字符之间!</message>
</field-validator>
</field>
正则式验证regex
<field name="username">
<field-validator type="regex">
<param name="regex">
<![CDATA[^[a-zA-Z0-9]{6,20}$]]>
</param>
<message>用户名称不合法!</message>
</field-validator>
</field>
验证框架同时支持客户端验证
<s:form action="user_add.action" validate="true">
在具体开发中不建议使用,因为能够支持的客户端验证比较有限,一般建议使用jquery.validate.js
以上是比较常用的功能,没有说到位的,欢迎指正!