标签:style blog color io os 使用 java ar for
问题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的资源就为空了,所以一定要做是否非空做出判断,要不要转换器还是起不了作用
-->
标签:style blog color io os 使用 java ar for
原文地址:http://www.cnblogs.com/jeremy-blog/p/3992751.html