页面部分例如:
<s:textfield name="point" lable="point" /> //坐标用逗号分隔开
<s:textfield name="age" lable="age" />
<s:textfield name="name" lable="name" />
<s:textfield name="date" lable="birthday" />
javaBean部分:
public class Point{
private int x;
private int y;
.....
}
建立一个自定义转化类
public class PointConverter extends DefaultTypeConverter{
@override
//toType 用来描述是从String(客户端)到自定义类型的转换还是自定义类型到String(客户端)的转换,toType表示转换成什么
//value是一个Object类型的数组(防止客户端同名文本输入框)
public Object convertValue(Map context, Object value, Class toType) {
//从客户端到服务器端的转换
if(Point.class == toType){
Point point = new Point();
String[] str = (String[])value;
String paramValues = str[0].split(",");
int x = Integer.parseInt(paramValues[0]);
int y = Integer.parseInt(paramValues[1]);
point.setX(x);
point.setY(y);
return point;
}
//从服务器到客户端的转换
if(String.class == toType){
Point point = (Point)value;
int x = point.getX();
int y = point.getY();
point.setX(x);
point.setY(y);
String result = "x=" + x + " , y= " + y;
return result;
}
return null;
}
}
Action类:
public class PointAction extends ActionSupport{
private Point point;
private int age;
private String name;
private Date date;
....
public String execute throws Exception{
return SUCCESS;
}
}
页面部分:
point:<s:property value="point" />
age:<s:property value="age" />
name:<s:property value="name" />
date:<s:property value="date" />
属性文件部分:(用来告诉struts2我们自定义的属性转换类,该属性文件必须与该属性转换类放置在相同的目录下)
该属性文件的命名必须遵从 “类名-conversion.properties” 此处的类名为属性所属的类的类名,即要对那个类下的属性进行转换,即:PointAction-conversion.properties
内容:
point=com.simier.converter.PointConverter //此处表示要对PointAction类中的point属性(setter方法对应的那个属性名)使用PointConverter类转换器进行属性转换 //文件中可以写多个转换配置
流程理解:
当页面发起一个请求时,请求会去找相应的Action类,后在Action类中找与表单属性相对应的setter方法,当然在调用相应setter方法之前struts2会先检查有没有定义一个与之类型相对应的自定义类型转换类,如果没有找到则会使用默认的类型转换机制进行转化,如果找到了就会使用找到的自定义转换类进行类型的转化,找的时候会去需要被转换的属性所属类的当前目录下去找“属性所属类类名-convertion.properties”属性文件,再在文件中找那个属性需要转换而且转换时是需要那个类来做转换
全局类型转换:
全局类型转换的属性文件的名字一固定的,“xwork-conversion.properties” 此文件需要放在 src 下面。
内容:
com.simier.action.Point=com.simier.converter.PointConverter //等号前面是系统中要被转换的对象类型,后面是使用的转换类