struts2 自定义类型转换器
需求:将客户端中一个文本框中指定的三原色转换成指定的对象封装。
1.定义一个封装的Color类对象
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }
2.定义一个Action,用于接收数据
注意:此处不能使用模型驱动方式,因为模型驱动需要多个属性来封装成对象。此处是一个文本框中数据转换成多个属性封装成对象
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }
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