struts2中的类型转换是基于xwork的。实际上是基于OGNL表达式语言。
类型转换步骤:
1.新建一个类型转换类
/**
* 自定义类型的转换类
* toType:要转换的类型
* value:要转换的值。定义成object类型的是为了通用。是一个数组
*/
@Override
public Object convertValue(Map<String, Object> context, Object value,Class toType) {
if(Point.class==toType){
//客户端到服务器端,Strign转换成自定义类型的转换
Point p=new Point();//new一个point对象
String[] str=(String[])value;//因为value是一个字符串数组。所以要进行向下类型转换。
//取出字符串数组的第一个值
String[] paramterValues=str[0].split(",");
int x=Integer.parseInt(paramterValues[0]);
int y=Integer.parseInt(paramterValues[1]);
p.setX(x);
p.setY(y);
return p;
}
if(String.class==toType){
//服务器端向客户端输出。自定义类型转换成String类型
Point point=(Point)value;
int x=point.getX();
int y=point.getY();
String result="[x="+x+","+"y="+y+"]";
return result;
}
return null;
}
2.新建一个action类
private Point point;
public Point getPoint() {
return point;
}
public void setPoint(Point point) {
this.point = point;
}
@Override
public String execute() throws Exception {
return SUCCESS;
}}
3.新建一个属性文件。命名规范:要转换的action类-conversion.properties里面写要转换的action类的属性=类型转换类。
point=com.test.convertor.PointConverter
4:流程:
表单提交到一个action类。在action类中赋值的同时:会查找有没有与当前action-conversion.properties的属性文件。如果有表示要对该类进行类型转换。在跳转到该属性文件。该属性文件中查看对该类的哪个属性进行转换。找到后跳转到对应的类型转换类进行转换。再执行execute()方法。如果要在jsp页面显示当前转换的类。会通过value属性。查看当前的名字要不要进行类型转换。如果不要。直接去action类调用get方法。否则继续去属性文件进行转换后调用get方法显示。