如何自定义类型转换器 ?

问题4. 如何自定义类型转换器 ?
1). 为什么需要自定义的类型转换器 ? 因为 Struts 不能自动完成 字符串 到 引用类型 的 转换.
      在java中,基本类型有int,double,float,boolean,char,引用类型就是对象类型,例如数组吖,对象吖,这些

2). 如何定义类型转换器:
StrutsTypeConverter 类--->继承OGNL.defaultTypeConverter---》继承OGNL.TypeConverter

I. 开发类型转换器的类: 所以咋们一般扩展StrutsTypeConverter 类就足够了

 1 package com.atguigu.struts2.Converter;
 2 
 3 import java.sql.Date;
 4 import java.text.DateFormat;
 5 import java.text.ParseException;
 6 import java.text.SimpleDateFormat;
 7 import java.util.Map;
 8 
 9 import org.apache.struts2.util.StrutsTypeConverter;
10 
11 public class TestTypeConverter extends StrutsTypeConverter {
12     
13     /*
14      * 此方法是用来将传进来的字符串数组变成一个Object对象
15      * 
16      * 
17      */
18     DateFormat dateFormat=new SimpleDateFormat("YYYY-MM-DD hh:mm:ss");
19     public Object convertFromString(Map arg0, String[] arg1, Class arg2) {
20         if(arg2==Date.class){
21             if(arg1!=null&&arg1.length>0){
22                 String string=arg1[0];
23                 try {
24                     dateFormat.parseObject(string);
25                 } catch (ParseException e) {
26                     // TODO Auto-generated catch block
27                     e.printStackTrace();
28                 }
29             }
30         }
31 
32         return arg1;
33     }
34     
35     /*
36      *
37      * 此方法是用来回显的时候调用的,将Object对象转换成字符串
38      * 
39      */
40 
41     public String convertToString(Map arg0, Object arg1) {
42         //判断是否为Date对象
43         if(arg1 instanceof Date){
44             //是的话,就使用format()方法将Date对象转换成一个字符串
45             return dateFormat.format(arg1);
46         }
47         return null;
48     }
49 
50 }

 

II. 配置类型转换器:
有两种方式
①. 基于字段的配置:
> 在字段所在的 Model(可能是 Action, 可能是一个 JavaBean) 的包下, 新建一个 ModelClassName-conversion.properties 文件

> 在该文件中输入键值对: fieldName=类型转换器的全类名. 

fieldName=类型转换器的全类名
例如下面的:
birth=com.atguigu.struts2.Converter.TestTypeConverter

> 第一次使用该转换器时创建实例.
> 类型转换器是单实例的!



②. 基于类型的配置:
> 在 src 下新建 xwork-conversion.properties

> 键入: 待转换的类型=类型转换器的全类名.

需要转换的类型=转换器全类名
例如下面的:
java.util.Date=com.atguigu.struts2.Converter.TestTypeConverter

> 在当前 Struts2 应用被加载时创建实例.所以若在转换器里有引用Web.xml里的参数时就要注意了,因为 转换器在Struts2在加载时就已经创建实例了,而此时web.xml还没加载呢,所以你在转换器里引用web.xml的资源就为空了,所以一定要做是否非空做出判断,要不要转换器还是起不了作用

-->

posted @ 2014-09-25 14:28  Jeremy_software  阅读(395)  评论(0编辑  收藏  举报