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.PointConverter4:流程:
表单提交到一个action类。在action类中赋值的同时:会查找有没有与当前action-conversion.properties的属性文件。如果有表示要对该类进行类型转换。在跳转到该属性文件。该属性文件中查看对该类的哪个属性进行转换。找到后跳转到对应的类型转换类进行转换。再执行execute()方法。如果要在jsp页面显示当前转换的类。会通过value属性。查看当前的名字要不要进行类型转换。如果不要。直接去action类调用get方法。否则继续去属性文件进行转换后调用get方法显示。