struts2请求参数校验

转自struts2知识总结

客户端校验和服务器端校验。
客户端校验包括:手动校验,xml配置规则校验,注解方式校验。
手动校验代码耦合性太高。所以一般用xml校验。
执行xml配置校验的要求: Action 必须继承ActionSupport类 (为了实现 Validateable接口)。
这里根据校验规则生效的范围分为全局校验和局部校验两种。
全局校验:对Action中的所有的方法都生效
局部校验:对Action中的某个方法生效
9.3.1.全局校验(★)
编写xml的方法:在Action类所在包,创建 Action类名-validation.xml
全局性的校验文件:直接是Action的名字-validation.xml
每个校验器的作用:
校验器 作用
required 必填校验器,要求被校验的属性不能为null
requiredstring 必填字符串校验器,要求被校验的属性不能为null,长度必须大于0,默认情况下会对字符串首尾去空格
stringlength 字符串长度校验器,要求被校验的属性必须在指定的范围内,否则校验失败
minLength:指定最小长度
maxLength:指定最大长度
trim:指定校验属性被校验时,是否去除字符串前后空格
regex 正则表达式校验器,检查被校验的属性是否匹配某个正则表达式
expression:指定正则表达式
caseSensitive:指定进行正则表达式匹配时,是否区分大小写,默认值为true
Int 整数校验器,要求field的整数值必须在指定范围内
min:指定最小值
max:指定最大值
double 双精度浮点型校验器,要求field的值必须在指定范围内
min:指定最小值
max:指定最大值
fieldexpression 字段ognl表达式校验器,要求field满足一个ognl表达式,
expression:指定ognl表达式
该逻辑表达式基于ValueStack进行求值,返回true时,验证通过
email 邮件地址校验器,如果field的内容不为空,则必须是合法邮件地址
url 网址校验器,如果field的内容不为空,则必须是合法的url地址
date 日期校验器,field的内容必须在某个范围内
min:指定最小值
max:指定最大值
conversion 转换校验器,指定在类型转换失败时,提示的错误信息
visitor 用于校验action中复合类型的属性,他指定一个校验文件,校验复合类型中属性
expression expression:指定ognl表达式,该逻辑表达式给予ValueStack进行求值,返回true是校验通过

提示:这些都是struts2内置的校验器,每一种校验器都可以实现一种校验规则方式。只需要记住常用的几个就行。

注意:使用xml配置校验的字段属性必须都有getter(因为需要将值取出来校验)

内置校验器小分析:
RequiredStringValidator校验器的作用是必须存在,必须是字符串,且默认值不能是空格。

为什么requiredstring能表示被校验的字段不能是空值呢?:原因是

【示例】如果你将trim的值设置为false的时候,校验的时候,不去除空格

【注意】属性必须提供getter方法。否则校验器无法得到数据,进行校验。
9.3.2.局部校验(★)
编写xml的方法:在Action类所在包,创建 类名-<Action>URL访问路径-validation.xml



【第五步】MyRegistAction-myRegist-validation.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>
<!-- 验证用户名 :(非空,且长度为3-10位)-->
<field name="username">
<!-- 非空 -->
<field-validator type="requiredstring">
<message>用户名不能为空</message>
</field-validator>
<!-- 长度验证 -->
<field-validator type="stringlength">
<param name="maxLength">10</param>
<param name="minLength">3</param>
<message>用户名必须是3-10位</message>
</field-validator>
</field>

<!-- 验证密码:(必须,且长度为6-12) -->
<field name="pwd">
<field-validator type="requiredstring">
<message>密码不能为空</message>
</field-validator>
<field-validator type="stringlength">
<param name="maxLength">12</param>
<param name="minLength">6</param>
<message>密码必须是6-12位</message>
</field-validator>
</field>

<!-- 重复密码:(必须和密码一致)
fieldexpression:专门用来比较表单字段的
-->
<field name="repwd">
<field-validator type="fieldexpression">
<param name="expression"><![CDATA[pwd==repwd]]></param>
<message>两次密码输入不一致</message>
</field-validator>
</field>

<!-- 验证年龄:(年龄在18-90之间) -->
<field name="age">
<field-validator type="int">
<param name="min">18</param>
<param name="max">90</param>
<message>年龄必须在18-90之间</message>
</field-validator>

</field>

<!-- 验证手机号码:(手机号规则,11位数字) -->
<field name="phone">
<field-validator type="regex">
<param name="regex"><![CDATA[^\d{11}$]]></param>
<message>手机号码必须是11位</message>
</field-validator>
</field>

<!-- email:符合邮箱的格式 -->
<field name="email">
<field-validator type="email">
<message>邮箱不符合格式</message>
</field-validator>
</field>
</validators>

提示:在Action 执行xml 校验时, 必须要为 变量提供 getter方法!!!
在所有的校验规则中,最负责的,无非是正则表达式校验。
9.3.3.自定义校验
自定义校验规则的作用:解决了struts2内置的校验规则中没有的校验规则。

自定义校验器,实现Validator接口, 一般可以继承FieldValidatorSupport

定义PhoneValidator.java类
package cn.itcast2.c_validation;

import com.opensymphony.xwork2.validator.ValidationException;
import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport;

public class PhoneValidator extends FieldValidatorSupport{
/**
* 参数:就是Action对象
要校验的对象,数据模型对象
*/
@Override
public void validate(Object object) throws ValidationException {
//获取需要验证的表单名字
String fieldName=super.getFieldName();
//根据表单名字获取表单内容
Object fieldValue=super.getFieldValue(fieldName, object);
//判断表单内容是否是String类型,如果是,则进行正则表达式验证
if(fieldValue.getClass()==String.class)
{
//将类型转换成String类型
String str=(String)fieldValue;
//进行正则表达式验证
boolean flag=str.matches("^\\d{11}$");
//如果验证不通过,则添加错误信息
if(!flag)
{
this.addFieldError(fieldName, object);
}
}
}
}


【第二步】: 注册校验器
在src新建 validators.xml

引入DTD xwork core 下面 xwork-validator-config-1.0.dtd


validators.xml的配置:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator Config 1.0//EN"
"http://struts.apache.org/dtds/xwork-validator-config-1.0.dtd">
<validators>
<!-- name:给校验器起的名字
class:对应校验器所在的完整包路径
-->
<validator name="phoneValidator" class="cn.itcast.c_validation.PhoneValidator">
</validator>
</validators>
【第三步】: 使用自定义校验器,在MyRegistAction-myRegist-validation.xml中添加:
<!-- 验证 手机号码(手机号规则,11位数字)-->
<!-- <field name="phone">
<field-validator type="regex">
<param name="regex"><![CDATA[\d{11}]]></param>
<message>手机号码必须是11位</message>
</field-validator>
</field> -->

<field name="phone">
<field-validator type="phoneValidator">
<message>手机号码必须是11位</message>
</field-validator>
</field>

posted @ 2017-11-27 20:23  大热  阅读(779)  评论(0编辑  收藏  举报