struts2请求参数的输入校验
2013-07-22 09:17
337 查看
请求参数校验包括,客户端校验、服务器端校验 (服务器端校验必须写)
* 客户端校验,即时报错 jQuery validate 插件 好处是改善用户体验
* 服务器端校验主要为了安全性
struts2 支持服务器端校验方式
校验时:指定对Action的所有方法进行校验,也可以指定校验Action的某个方法
第一种 : 手工编程校验
对action的所有方法进行校验
校验使用前,Action类必须继承ActionSupport
在Action中 添加 public void validate() 方法
*validate()方法在其他的业务方法之前执行
* 验证出错转向的页面
struts.xml配置<resultname="input">/validate/login.jsp</result>
其中input转向是在action中已经定义好的.
public static final StringINPUT = "input";
Action 可以有三种信息,回显给JSP页面 ActionError ActionMessageFieldError
*ActionError 代表Action执行中发生错误信息,例如:表单重复提交、用户名或者密码错误
*ActionMessage 不是错误信息,存放Action要传递给JSP的普通信息,例如:添加学生成功,用户注册成功
*FieldError 字段错误例如:类型转换错误、数据校验
手动指定校验Action的某个方法
格式:在Action中添加 valuedateXxx() 方法 ,就会校验 xxx业务方法
例如: 只想校验Action的add方法 ---------public void validateAdd() {...} 将add方法首字母大写,在前面 添加validate
第二种 : XML配置校验 (重点)
不需要在Action中编写validate 校验方法
使用xml配置方式进行校验,验证的xml文件的规范在xwork-core-2.3.1.1.jar包下的:xwork-validator-1.0.3.dtd
对Action中所有业务方法完成校验
在Action类所在包 创建 "Action类名-validation.xml"
在xwork的jar包 内部com.opensymphony.xwork2.validator.validators 包内部default.xml 定义了常用校验器
常用校验器
requiredstring 校验"",非空输入校验
stringlength 字符串长度校验器
regex 正则表达式校验器
int 输入整数范围校验器
double 输入浮点数范围校验器
email 邮箱格式校验
date 日期格式校验(范围)
fieldexpression 字段表达式校验,支持ognl表达式 (两次密码一致)
第三种 : 注解配置校验(略)
=============================================================================================
自定义校验规则
实际开发中很少用,由于struts中的规则很全了。
1、 自定义校验器必须 实现 Validator 接口
2、 实现validate方法 校验核心方法, struts2会将校验对象 传递给该方法
制作与多个字段相关校验器 , 可以继承 ValidatorSupport 类
制作与一个字段相关校验器 , 可以继承 FieldValidatorSupport 类 (制作案例)
3、 注册校验器在src下创建 validators.xml
该xml文件采用的规范在xwork-core-2.1.6.jar包下的xwork-validator-config-1.0.dtd
4、 在校验xml文件中 使用自定义校验器
案例: 自定义大于0 校验器 (正数校验器)
在校验器获得字段名称 this.getFieldName(), 字段值 this.getFieldValue()
* 客户端校验,即时报错 jQuery validate 插件 好处是改善用户体验
* 服务器端校验主要为了安全性
struts2 支持服务器端校验方式
校验时:指定对Action的所有方法进行校验,也可以指定校验Action的某个方法
第一种 : 手工编程校验
对action的所有方法进行校验
校验使用前,Action类必须继承ActionSupport
在Action中 添加 public void validate() 方法
*validate()方法在其他的业务方法之前执行
* 验证出错转向的页面
struts.xml配置<resultname="input">/validate/login.jsp</result>
其中input转向是在action中已经定义好的.
public static final StringINPUT = "input";
Action 可以有三种信息,回显给JSP页面 ActionError ActionMessageFieldError
*ActionError 代表Action执行中发生错误信息,例如:表单重复提交、用户名或者密码错误
*ActionMessage 不是错误信息,存放Action要传递给JSP的普通信息,例如:添加学生成功,用户注册成功
*FieldError 字段错误例如:类型转换错误、数据校验
例:@Override public void validate() { // 学生姓名不能为空 if (student.getName() == null || student.getName().trim().length() == 0) { // 学习姓名 为空 ,非法 // 跳转回 input 页面,传递一个信息给 input 页面 //addFieldError(filename,message) filename为哪个字段发生错误,message为错误提示消息 this.addFieldError("name", "学生姓名不能为空"); } // 学生姓名长度 必须2-4位之间 else if (student.getName().length() < 2 || student.getName().length() > 4) { this.addFieldError("name", "学生姓名长度必须2到4位之间"); } }
手动指定校验Action的某个方法
格式:在Action中添加 valuedateXxx() 方法 ,就会校验 xxx业务方法
例如: 只想校验Action的add方法 ---------public void validateAdd() {...} 将add方法首字母大写,在前面 添加validate
第二种 : XML配置校验 (重点)
不需要在Action中编写validate 校验方法
使用xml配置方式进行校验,验证的xml文件的规范在xwork-core-2.3.1.1.jar包下的:xwork-validator-1.0.3.dtd
对Action中所有业务方法完成校验
在Action类所在包 创建 "Action类名-validation.xml"
在xwork的jar包 内部com.opensymphony.xwork2.validator.validators 包内部default.xml 定义了常用校验器
常用校验器
requiredstring 校验"",非空输入校验
stringlength 字符串长度校验器
regex 正则表达式校验器
int 输入整数范围校验器
double 输入浮点数范围校验器
email 邮箱格式校验
date 日期格式校验(范围)
fieldexpression 字段表达式校验,支持ognl表达式 (两次密码一致)
例: <validators> <!-- 定义很多校验规则 --> <!-- field 代表表单 一个字段 name 就是字段的名称--> <field name="name"> <!-- 对name字段进行校验 --> <!-- 进行哪些规则的校验,在struts2内部提供一些已经实现校验器 --> <field-validator type="requiredstring"> 注:这里的< param >参数主要看拦截器中有set方法的字段,查看方式如下: 例如<validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/> 在myeclipse中选中类名按住ctrl+shift+T,再回车后就进入了源码,在源码中查看有set方法的字段。 <!-- 可以向校验器 内部 setXXX 方法传递 参数 --> <param name="trim">true</param> <!-- 设置校验失败错误信息,错误信息会被addFieldError --> <message>学生姓名不能为空!</message> </field-validator> <!-- 校验长度必须2-4位 --> <field-validator type="stringlength"> <param name="trim">true</param> <param name="minLength">2</param> <param name="maxLength">4</param> <message>学生姓名长度必须在2到4位之间</message> </field-validator> </field> 如果校验失败此处struts会自动调用 addFieldError("name",message);方法进行错误添加 </validators> 校验Action中指定的业务方法 文件命名: Action类名-ActionName(struts.xml 配置 <action> 的name属性)-validation.xml 例如:校验 StudentAction2 中 execute方法 <action name="student2" class="cn.itcast.action.demo4.StudentAction2"> 文件名: StudentAction2-student2-validation.xml <validators> <field name="age"> <field-validator type="int"> <param name="min">10</param> <param name="max">100</param> <message>年龄必须在10到100之间!</message> </field-validator> </field> </validators> 案例: 两次密码一致,比较案例 <field name="repassword"> <!-- 重复密码 必须 两次输入一致 --> <field-validator type="fieldexpression"> <param name="expression"> <![CDATA[password == repassword]]> </param> <message>两次密码输入不一致</message> </field-validator> </field> 案例:required 必填校验器 <field-validator type="required"> <message>性别不能为空!</message> </field-validator> requiredstring 必填字符串校验器 <field-validator type="requiredstring"> <param name="trim">true</param> <message>用户名不能为空!</message> </field-validator> stringlength:字符串长度校验器 <field-validator type="stringlength"> <param name="maxLength">10</param> <param name="minLength">2</param> <param name="trim">true</param> <message><![CDATA[产品名称应在2-10个字符之间]]></message> </field-validator> int:整数校验器 <field-validator type="int"> <param name="min">1</param> <param name="max">150</param> <message>年龄必须在1-150之间</message> </field-validator> date: 日期校验器 <field-validator type="date"> <param name="min">1900-01-01</param> <param name="max">2050-02-21</param> <message>生日必须在${min}到${max}之间</message> </field-validator> url: 网络路径校验器 <field-validator type="url"> <message>传智播客的主页地址必须是一个有效网址</message> </field-validator> email:邮件地址校验器 <field-validator type="email"> <message>电子邮件地址无效</message> </field-validator> regex:正则表达式校验器 <field-validator type="regex"> <param name="expression"><![CDATA[^13\d{9}$]]></param> <message>手机号格式不正确!</message> </field-validator> fieldexpression : 字段表达式校验 <field-validator type="fieldexpression"> <param name="expression"><![CDATA[(password==repassword)]]></param> <message>两次密码输入不一致</message> </field-validator>
第三种 : 注解配置校验(略)
=============================================================================================
自定义校验规则
实际开发中很少用,由于struts中的规则很全了。
1、 自定义校验器必须 实现 Validator 接口
2、 实现validate方法 校验核心方法, struts2会将校验对象 传递给该方法
制作与多个字段相关校验器 , 可以继承 ValidatorSupport 类
制作与一个字段相关校验器 , 可以继承 FieldValidatorSupport 类 (制作案例)
3、 注册校验器在src下创建 validators.xml
该xml文件采用的规范在xwork-core-2.1.6.jar包下的xwork-validator-config-1.0.dtd
4、 在校验xml文件中 使用自定义校验器
案例: 自定义大于0 校验器 (正数校验器)
在校验器获得字段名称 this.getFieldName(), 字段值 this.getFieldValue()
@Override // action 需要被校验的对象 --- Action对象,该对象主要作用 添加错误信息 public void validate(Object action) throws ValidationException { // 获得字段的名称 ,比如age String fieldName = this.getFieldName(); // 获得字段的值 Object value = this.getFieldValue(fieldName, action); // 判断 如果value 小于 0 ,输入非法 if (value instanceof Integer) { // 输入是一个数字 Integer intVal = (Integer) value; if (intVal < 0) { // 非法内容 this.addFieldError(fieldName, action);// 将错误信息,添加到Action,信息来自校验配置文件 } } else { throw new RuntimeException("输入字段不是一个数字!"); } } 在src下创建validators.xml <validators> <!-- 注册 校验器 --> <validator name="age" class="cn.itcast.action.demo5.MyValidator"></validator> </validators>
相关文章推荐
- JAVAWEB开发之Struts2详解(二)——Action接受请求参数、类型转换器、使用Struts2的输入校验、以及遵守约定规则实现Struts2的零配置
- Struts2请求参数校验
- Struts2学习之2(请求参数的封装,类型转换,输入验证,自定义拦截器)
- struts2-请求参数校验
- struts2_请求参数_配置校验(XML配置)
- 16_struts2_1请求参数获取和校验
- Struts2中请求参数校验
- struts2教程(5)--请求参数校验
- struts2_请求参数_手动校验(代码校验)
- Struts2---请求参数校验
- Struts2请求参数合法性校验机制
- struts2中Action对请求参数有效性的校验
- Struts2输入校验总结
- Struts2 对Action中所有方法进行输入校验、单个方法进行校验
- Struts2输入校验总结
- Struts2的输入校验(一)
- struts2笔记之共享数据的3种方式和请求参数封装
- struts2输入校验
- struts2之Action获取请求参数与web元素
- Struts2基于XML配置文件实现输入校验