struts2 自定义类型转换器

    需求:将客户端中一个文本框中指定的三原色转换成指定的对象封装。    

    1.定义一个封装的Color类对象

    

 1 public class Color implements Serializable{
 2     /**
 3      * 最终转换成的Color类对象
 4      */
 5     private static final long serialVersionUID = 1L;
 6     private int red;
 7     private int green;
 8     private int blue;
 9     public int getRed() {
10         return red;
11     }
12     public void setRed(int red) {
13         this.red = red;
14     }
15     public int getGreen() {
16         return green;
17     }
18     public void setGreen(int green) {
19         this.green = green;
20     }
21     public int getBlue() {
22         return blue;
23     }
24     public void setBlue(int blue) {
25         this.blue = blue;
26     }
27     
28     @Override
29     public String toString() {
30         return "Color [red=" + red + ", green=" + green + ", blue=" + blue
31                 + "]";
32     }
33 }
Color类

 

    2.定义一个Action,用于接收数据

      注意:此处不能使用模型驱动方式,因为模型驱动需要多个属性来封装成对象。此处是一个文本框中数据转换成多个属性封装成对象

 1 public class ColorAction extends ActionSupport {
 2     private Color color;
 3 
 4     public Color getColor() {
 5         return color;
 6     }
 7      //OgnlValueStack   com.opensymphony.xwork2.interceptor.ParametersInterceptor
 8     public void setColor(Color color) {
 9         this.color = color;
10     }
11     public String colorConversion(){    
12         System.out.println("++++++++++++++++++++++"+color);
13         return SUCCESS;
14     }
ColorAction

    3.自定义转换器。

    通过继承DefaultTypeConverter或实现TypeConverter  重写convertValue(Map<String, Object> context, Object value,Class toType)方法

 1 public class ColorConversion extends DefaultTypeConverter{
 2         /**
 3          *  参数:
 4          *  context:struts的上下文对象(相当于application)
 5          *  value:需要被转换的数据(从客户端读取的值)
 6          *  toType:需要被转化的目标类型
 7          */
 8     @Override
 9     public Object convertValue(Map<String, Object> context, Object value,
10             Class toType) {
11         
12         if (toType==Color.class) {
13             //获取到参数
14             /*
15              * 相当于request.getParameterValues();返回必须是数组
16              */
17             System.out.println("===========================================");
18             String[] colorstr=(String[])value;
19             /*
20              * 根据需求完成逻辑操作
21              */
22             //分割封装成对象
23             String[] colors=colorstr[0].split(",");
24             //创建color
25             Color color=new Color();
26             color.setRed(Integer.parseInt(colors[0]));
27             color.setGreen(Integer.parseInt(colors[1]));
28             color.setBlue(Integer.parseInt(colors[2]));
29             System.out.println(color);
30             return color;
31         }
32         /*
33          * 若没有进行转换,默认是字符串的表现形式
34          */
35         return value.toString();
36     }    
37 }

   1. 局部类型转换器(配置文件在执行的Action所在包中)

    文件名必须是:该Action类的名字加上“-”加上“conversion.properties”  如:这里就是ColorAction-conversion.properties

    配置文件中添加键值对:  Action中的需要转换的对象名,值为  自定义的转换器的完全限定名

                color=com.bzk.web.utils.ColorConversion

    搞定!配置完毕后,当启动服务器时候会自动加载配置文件,当实例化Action时候会自动的调用我们配置的类型转换器

   2.全局类型转换器(只需要将配置的properties文件放到src目录下)

    文件名改为:xwork-conversion.properties  

    此时文件的配置文件中的键值都必须是完全限定名

    如:此处  com.bzk.model.pojo.Color=com.bzk.web.utils.ColorConversion

 

    

    

posted @ 2015-09-23 22:08  凤栖梧桐镇  阅读(322)  评论(0编辑  收藏  举报