需求:将客户端中一个文本框中指定的三原色转换成指定的对象封装。
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 @Override29 public String toString() {30 return "Color [red=" + red + ", green=" + green + ", blue=" + blue31 + "]";32 }33 }
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 }
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(Mapcontext, 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 //创建color25 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