关于类型转换还有一种写法:
public class ConverterPoint extends StrutsTypeConverter {
// @Override
// public Object convertValue(Map context, Object value, Class toType) {
// if(Point.class == toType){
// String[] params = (String[])value;
// params = params[0].split(",");
// Point point = new Point();
// point.setX(Integer.parseInt(params[0]));
// point.setY(Integer.parseInt(params[1]));
// return point;
//
// }else if(String.class == toType){
// Point point = (Point)value;
// return "x=" + point.getX() + ",y=" + point.getY();
// }
// return super.convertValue(context, value, toType);
// }
@Override
public Object convertFromString(Map arg0, String[] arg1, Class arg2) {
String[] params = arg1;//(String[])value;
params = params[0].split(",");
Point point = new Point();
point.setX(Integer.parseInt(params[0]));
point.setY(Integer.parseInt(params[1]));
return point;
}
@Override
public String convertToString(Map arg0, Object arg1) {
Point point = (Point)arg1;
return "x=" + point.getX() + ",y=" + point.getY();
}
}
原来是继承ognl.DefaultTypeConverter类,现在改成继承org.apache.struts2.util.StrutsTypeConverter类了,看org.apache.struts2.util.StrutsTypeConverter的源码可知道org.apache.struts2.util.StrutsTypeConverter是个抽象类,并实现了ognl.TypeConverter,org.apache.struts2.util.StrutsTypeConverter中有两个要实现的方法一个convertFromString,一个convertToString,看方法名字就知道一个从字符串转换成Object,一个是将Object转换成String,这样好像更加清晰
另外还有一种全局转换的配置,就是建立一个统一的属性文件,文件名为xwork-conversion.properties,与struts.xml位于统一目录下,里面的配置改成了
com.test.struts2.data.Point=com.test.struts2.action.ConverterPoint
意思是所有com.test.struts2.data.Point类型的对象都要通过com.test.struts2.action.ConverterPoint来转换