自定义类型转换器

 

 1 一、自定义类型转换器
 2     1、编写一个类,继承com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter
 3     2、覆盖掉其中的public Object convertValue(Map<String, Object> context, Object value,Class toType)
 4             context:OGNL表达式的上下文
 5             value:实际的值。用户输入的都是字符串,但他是一个String数组。
 6             toType:目标类型

      import java.text.DateFormat;
      import java.text.ParseException;
      import java.text.SimpleDateFormat;
      import java.util.Date;
      import java.util.Map;

      import com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter;

 7     public class DateConvertor extends DefaultTypeConverter {
 8         /*
 9          context:ognl表达式的上下文
10          value:用户输入的值( 保存数据时)或者模型中的属性。用户输入的值是String数组
11          toType:目标类型
12          */
13         @Override
14         public Object convertValue(Map<String, Object> context, Object value,
15                 Class toType) {
16             DateFormat df = new SimpleDateFormat("yyyy/MM/dd");
17             if(toType==Date.class){
18                 //2013/05/31----->java.util.Date 保存数据时
19                 String strValue = ((String[])value)[0];
20                 try {
21                     return df.parse(strValue);
22                 } catch (ParseException e) {
23                     throw new RuntimeException(e);
24                 }
25             }else{
26                 //java.util.Date----->2013/05/31 获取数据时
27                 Date dValue = (Date)value;
28                 return df.format(dValue);
29             }
30         }
31     }
32     3、注册类型转换器
33         3.1局部类型转换器:只对当前的Action有效
34         具体做法:在动作类相同的包中,建立一个名称是“动作类名-conversion.properties”的配置文件,
35             文件中增加以下内容:要验证的字段=验证器的类全名
36                     birthday=cn.itcast.convertor.DateConvertor
37         3.2全局类型转换器:对所有的Action都有效
38         具体做法:在src  编译后会在WEB-INF/classes目录下,建立一个名称为"xwork-conversion.properties"的配置文件,
39             文件中增加以下内容:目标类型全名=验证器的类全名
40                     java.util.Date=cn.itcast.convertor.DateConvertor
41         
42         
43         
44     注意:如果转换失败,Struts2框架会寻找name=input的结果页面

 

你可能感兴趣的:(类型转换)