Struts2的类型转换可以使用基于OGNL表达式的存在,在OGNL中,DefaultTypeConverter实现了ognl.TypeConverter接口,该类提供了一个简化的convertValue的方法。
xwork-core包中也同样有一个名为TypeConverter的接口,StrutsTypeConverter类是抽象类,继承DefaultTypeConverter,该抽象类定义了2个抽象方法:
xwork-core包中也同样有一个名为TypeConverter的接口,StrutsTypeConverter类是抽象类,继承DefaultTypeConverter,该抽象类定义了2个抽象方法:
converFromString,converToString
以下是2个测试Demo
package test1;
import com.opensymphony.xwork2.ActionSupport;
public class form1Action extends ActionSupport {
private Point point;
public Point getPoint() {
return point;
}
public void setPoint(Point point) {
this.point = point;
}
@Override
public String execute() throws Exception {
System.out.println(point);
return super.execute();
}
}
package test1;
public class Point {
private double x;
private double y;
public double getX() {
return x;
}
public void setX(double x) {
this.x = x;
}
public double getY() {
return y;
}
public void setY(double y) {
this.y = y;
}
@Override
public String toString() {
return "Point [x=" + x + ", y=" + y + "]";
}
}
package test1;
import java.util.Map;
import org.apache.struts2.util.StrutsTypeConverter;
public class pointConversion extends StrutsTypeConverter{
@Override
public Object convertFromString(Map context, String[] values, Class toClass) {
// TODO Auto-generated method stub
//获取传进来的values,注意是数组
String str = values[0];
String[] p = str.split(",");
Point point = new Point();
point.setX(Double.parseDouble(p[0]));
point.setY(Double.parseDouble(p[0]));
return point;
}
@Override
public String convertToString(Map context, Object o) {
//Object o 就是需要我们处理后传出去的对象
Point point = (Point)o;
return point.toString();
}
}
自定义了类型转换器后,还必须进行配置
1.应用于全局范围的类型转化器,需要在classpath的根路劲下创建一个名为xwork-conversion.properties的属性文件,其内容为:转换类全名 = 类型转换器类全名 (java.util.Date = .......);
2.应用于特定类的类型转换器
要指定应用于特定类的类型转换器,需要在特定类的相同目录下创建一个名为ClassName-conversion.properties的属性文件,其内容为:特定类的属性名=类型转换器类全名