zoukankan      html  css  js  c++  java
  • 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

        

        

  • 相关阅读:
    Apache Log4j 学习笔记
    关于BindingResult
    Java源码分析:深入探讨Iterator模式
    hibernate的ID生成策略(annotation方式@GeneratedValue)
    HTML5本地存储不完全指南
    pageX,clientX,offsetX,layerX的那些事
    getHibernateTemplate().execute(new HibernateCallback())方法
    jQuery.extend 与 jQuery.fn.extend 的区别
    16个优秀的JavaScript教程和工具推荐
    Spring 2.5:Spring MVC中的新特性
  • 原文地址:https://www.cnblogs.com/bingzhikun/p/4833688.html
Copyright © 2011-2022 走看看