一,局部类型转换(对某个action中的字段进行类型转换):
1,写一个针对该action的要转换的字段的转换器,继承DefaultTypeConverter,重写convertValue方法
2,在该action同一个目录下(同一包下) 新建一个xxx-conversion.properties文件。xxx是该action的类名
规则:需要字段名=该字段的转换器
如: point=com.mengya.converter.PointConverter
...(若还有其它的字段需要转化则继续写)
3,这样写只能针对该action里的字段进行转换,其它的action不行,当然也可以配置其它的action的转换器
4,对于字符串,数字,日期Struts2内置的类型转换。
二,全局类型转换
1,在src(即class下面)下面新建一个xwork-conversion.properties文件。
规则:需要转换的类=该类的转换器
如:com.mengya.util.Point=com.mengya.converter.PointConverter
三,转换器:
1,继承DefaultTypeConverter
如:
@Override
public Object convertValue(Map context, Object value, Class toType) {
// 要将字符串转换成point类
if (toType == Point.class) {
String[] str = (String[]) value;
String paramValue = str[0];
String[] p = paramValue.split(",");
int x = Integer.parseInt(p[0]);
int y = Integer.parseInt(p[1]);
Point point = new Point();
point.setX(x);
point.setY(y);
return point;
// 要将point类转换成字符串
} else if (toType == String.class) {
Point point = (Point) value;
return "X=" + point.getX() + " Y=" + point.getY();
}
return null;
}
2,继承StrutsTypeConverter
如:
// 从String转换成一个对象
@Override
public Object convertFromString(Map context, String[] value, Class toType) {
String paramValue = value[0];// 取第一个元数,因为页面没有相同的字段名
String[] params = paramValue.split(",");// 将","把用户所输入的字符串分隔开,即取得x与y的值
int x=Integer.parseInt(params[0]);
int y=Integer.parseInt(params[1]);
Point p=new Point();
p.setX(x);
p.setY(y);
return p;
}
// 从一个对象转换成一个字符串
@Override
public String convertToString(Map context, Object value) {
Point p=(Point) value;
return "[X="+p.getX()+",Y="+p.getY()+"]";
}
四,集合类型属性转换器,如action中有一个集合类型的属性也可以进行转换
public class PointListConverter extends StrutsTypeConverter {
// 从String[]转换成List<Point>
@Override
public Object convertFromString(Map context, String[] value, Class toType) {
List<Point> pointList = new ArrayList<Point>();
for (String str : value) {
Point p = new Point();
String[] s = str.split(",");
p.setX(Integer.parseInt(s[0]));
p.setY(Integer.parseInt(s[1]));
pointList.add(p);
}
return pointList;
}
// 从List<Point>集合转换成Stirng
@Override
public String convertToString(Map context, Object toType) {
List<Point> pointList = (List<Point>) toType;
String value = "";
for (int i = 0; i < pointList.size(); i++) {
value = value + "[X=" + pointList.get(i).getX() + ",Y=" + pointList.get(i).getY() + "]";
}
return value;
}
}
五,说明:若action有一个point属性在jsp页面可以这样自己赋值:
<s:textfield name="point.x" label="X"></s:textfield>
<s:textfield name="point.y" label="Y"></s:textfield>