代码解说:
1、引入参数中的toType表示的是目标类型(是字符串类型还是Date类型):
当客户端string提交到DateConvert这个类时候(即:toType==Date.class),value指的是textfield中填写的字符串。
对if(Date.class==toType)过程解释:
(1)String[] params = (String[])value;---------------将value显示转化为字符数组后赋值为数组str[];
(2)dateString = params[0];//获取日期的字符串 -------取出str[]的第一个元素
2、配置属性文件使得让date属性由DateConvert处理:
(1)在和要被convert的类的同目录下新建一个文件:
Action-conversion.properites
Action --------要转换的属性所在的类的类名
-conversion.properies-----固定格式
(2)填写属性文件内容:
date=ouc.sei.trace.util.DateConvert
date--------具体要转换哪一个属性
ouc.sei.trace.util.DateConvert-----具体用那个convert类来转换date
注意:如果对多个属性进行转换可以添加多个如date=ouc.sei.trace.util.DateConvert形式的内容。
3、程序运行流程
运行流程分两步:
一、字符串字段被转化为对应数据类型字段上传到action中;
二、对应字段被转化为字符串类型字段显示在输出页面;
第一步:input.jsp提交表单---->进入表单提交的action,在此action里接受表单穿过来的各个字段,是基本数据类型字段struts2会自动进行对其转换,如果遇到对象类型字段则进入此action所在的目录查找转换配置文件(Action-convertion.properties),在转换配置文件中查找处理此对象数据类型的类(DateConverter.java)---->对象类型转化类将form提交过来的与对象类型相关的字符串转化为对象实例->转化后的对象实例被设置(set)到action中;
第二步:action中的众多字段里,如果是基本数据类型字段的struts2会自动转换为字符串类型字段发送到输出页面(out.jsp), 如果是对象类型字段则会进入action中找转换配置文件(Action-convertion.properties),在转换配置文件中查找处理此对象数据类型的类(DateConverter.java)---->对象类型抓换类将action中的对象类型字段转换为相应字符串字段---->转换后的字符串实例被get到输出页面。
4、定义全局类型转换
上面所演示的是局部类型转换方式,假如有四个action,分别为Action1、Action2、Action3、Action4,每个Action里面都有一个相同的date属性需要转换,所以必须在net.javaw.action包下面创建四个属性文件指定每个Action都需要DateConverter类进行转换,即:
Action1-coversion.properties,ction2-coversion.properties, Action3-coversion.properties,Action4-coversion.properties
如果更多类需要转换,显然这种方式比较累人,这种情况可以考虑使用全局类型转换。
配置步骤:
(1)在src目录下创建全局属性文件,文件名为:
xwork-conversion.properties 文件名是固定不变的。
(2)全局属性文件内容:
net.javaw.bean.Date=ouc.sei.trace.util.DateConverter
等号左边是要转换的类所在的包名,右边是具体用那个convert类来转换date。