關于類型轉換還有一種寫法:
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來轉換