Struts类型转换
l Struts2中为什么要类型转换?
HTML表单采集数据 -->提交表单--> Action
底层依赖HTTP传递数据,而HTTP协议中 没有 “类型” 的概念. 每一项
表单输入只可能是一个字符串或一个字符串数组。因此在服务器端Action
中 必须把 String 转换为业务需要的特定的数据类型
l Struts2中如何传递请求参数给Action?
Struts2框架会将表单的参数以同名的方式设置给对应Action的属性中。
该工作主要是由Parameters拦截器做的。而该拦截器中已经自动的实现了
String到基本数据类型之间的转换工作。类似于:Beanutils工具。
在struts中JSP提交数据时,struts会自动转换成action中的属性的类型;对于基本数据类型以及日期类型会自动转换。日期类型只支持YYYY-MM-dd格式的自动转换,其他类型的日期格式获取到的数据为null,页面会进行跳转,但是后台会报错。对于日期类型,需要自定义类型转换器来处理。
如果类型自动转换出错,那么struts框架会 默认找名为input的result进行处理,因此开发者需要在此action的result配置红配置一个名为input的result。前提是该action继承ActionSupport。
自定义转换器分为全局转换器和局部转换器。
如果封装请求参数的时候出现乱码问题,那么 请查看表单的提交方式是否是post。Struts2默认的编码方式是utf-8
Struts API转换器StrutsTypeConverter类,该类实现了TypeConverter
接口
|--StrutsTypeConverter 用户编写的转换器继承这个类即可。
l Struts2中如何自定义类型转换器?
接口à 实现类
l Struts2中如何配置自定义转换器?
1、自定义转换器继承StrutsTypeConverter
2、重写convertFromString和convertToString方法
3、注册转换器
3.1 在Action所在包中建立Action名-conversion.properties
3.2 在3.1文件中添加以下数据需要转换的字段名=自定义转换器类的全限定名
birthday=cn.itcast.convertor.DateTypeConvertor
l 总结
以上的转换器注册时候是与Action的名字相耦合的,因此只能在自己的Action中内部使用,称之为局部转换器注册方式。
如何定义全局类型转换器呢?
实现的接口和继承的类都是相同的,本质上就是配置的方式不同。
l 实现
1、自定义转换器继承StrutsTypeConverter
2、重写convertFromString和convertToString方法
3、注册转换器
3.1 在项目src目录下建立以下固定文件
3.2 在3.1文件中添加以下数据
需要转换的类类型=转换器类的全限定名
如: java.util.Date= cn.itcast.converter.DateConverter
l 总结
该拦截器负责对错误信息进行拦截器<interceptorname="conversionError“
class="org.apache.struts2.interceptor.StrutsConversionErrorInterceptor"/>
form 标签可以被映射到Action中一个属性的属性中,也可以被映射到一个集合对象中。
Struts2首先通过反射技术调用address的默认构造器创建 address对象,然后再通过反射技术调用address中与请求参数同名的属性的setter方法来获取请求参数值。
原文地址:http://blog.csdn.net/ning_xian_hong/article/details/45954339