Struts2 日期类型转换 html
在Struts2中,通常的内置类型都会由系统自动进行转换.可是Date类型好像有时候行,有时候不行。所以要想保证系统正确的对Date类型进行转换,就要写一个全局的类型转换类,进行Date与String之间的类型转换。 java
package ouc.sei.trace.util; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Map; import com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter; public class DateConverter extends DefaultTypeConverter { private static final DateFormat[] ACCEPT_DATE_FORMATS = { new SimpleDateFormat("MM/dd/yyyy"), new SimpleDateFormat("yyyy-MM-dd"), new SimpleDateFormat("yyyy/MM/dd") }; //支持转换的日期格式 @Override public Object convertValue(Map context, Object value, Class toType) { if (toType == Date.class) { //浏览器向服务器提交时,进行String to Date的转换 Date date = null; String dateString = null; String[] params = (String[])value; dateString = params[0];//获取日期的字符串 for (DateFormat format : ACCEPT_DATE_FORMATS) { try { return format.parse(dateString);//遍历日期支持格式,进行转换 } catch(Exception e) { continue; } } return null; } else if (toType == String.class) { //服务器向浏览器输出时,进行Date to String的类型转换 Date date = (Date)value; return new SimpleDateFormat("yyyy-MM-dd").format(date);//输出的格式是yyyy-MM-dd } return null; } } 在根目录src下建立xwork-conversion.properties文件,并在里面添加下面语句,注册类型转换器
代码解说: 浏览器 1、引入参数中的toType表示的是目标类型(是字符串类型仍是Date类型): 服务器 当客户端string提交到DateConvert这个类时候(即:toType==Date.class),value指的是textfield中填写的字符串。 jsp 对if(Date.class==toType)过程解释: ide (1)String[] params = (String[])value;---------------将value显示转化为字符数组后赋值为数组str[]; post (2)dateString = params[0];//获取日期的字符串 -------取出str[]的第一个元素 spa 二、配置属性文件使得让date属性由DateConvert处理: code (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、程序运行流程 运行流程分两步: 1、字符串字段被转化为对应数据类型字段上传到action中; 2、对应字段被转化为字符串类型字段显示在输出页面; 第一步: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到输出页面。 四、定义全局类型转换 上面所演示的是局部类型转换方式,假若有四个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。 |
转载必须注明出处,来源: http://www.cnblogs.com/javaw/archive/2012/08/23/2652023.html