struts自定义数据类型转换的两种方式的对比
??? 对于自定义类型转换类,可以利用struts框架提供的“org.apache.struts2.util.StrutsTypeConverter ”抽象类,它是“ognl.DefaultTypeConverter ”的抽象子类,有两个方法,一个是表单参数转换成属性对应数据类类型的方法,另一个是属性数据类型转换成表单字符串类型。相比于直接继承“ognl.DefaultTypeConverter ”类进行自定义类型转换类,继承StrutsTypeConverter类更加直观,因为它把两个不同转换过程封装成两个不同的方法,而在DefaultTypeConverter 类中,是通过if~~~else~~~进行分类转换,容易出错。
以下是两种不同方式的对比代码,以转换成point(坐标)类型为例:
?
①通过继承StrutsTypeConverter 类设计自定义的类型转换类package com.hzp.converter;import java.util.Map;import org.apache.struts2.util.StrutsTypeConverter;import com.hzp.bean.Point;public class ConvertPoint2 extends StrutsTypeConverter { public Object convertFromString(Map map, String[] value, Class toType) { // 从表单转换成对应属性类型 String[] str = (String[]) value; String p = str[0]; String[] strPoint = p.split(","); Point point = new Point(); point.setX(Integer.parseInt(strPoint[0])); point.setY(Integer.parseInt(strPoint[1])); return point; } public String convertToString(Map map, Object o) { //从属性对象转化成表单string类型 Point point = (Point) o; String x = Integer.toString(point.getX()); String y = Integer.toString(point.getY()); String result = "(" + x + "," + y + ")"; return result; }} ②直接继承DefaultTypeConverter 类设计自定义类型转化类package com.hzp.converter;import java.util.Map;import com.hzp.bean.Point;import ognl.DefaultTypeConverter;public class ConvertPoint extends DefaultTypeConverter { public Object convertValue(Map context, Object value, Class toType) { //从表单转换成对应属性类型 if (Point.class == toType) { String[] str = (String[]) value; String p = str[0]; String[] strPoint = p.split(","); Point point = new Point(); point.setX(Integer.parseInt(strPoint[0])); point.setY(Integer.parseInt(strPoint[1])); return point; } //从对应属性类型转换成字符串给显示页面 else if(String.class == toType) { Point point = (Point) value; String x = Integer.toString(point.getX()); String y = Integer.toString(point.getY()); String result = "(" + x + "," + y + ")"; return result; } else { return null; } }}
?