在HTML表单中的文本框里输入的不管是数值类型还是字符类型,最后都是以String类传到后台。如果后台bean的属性是int、double、Date等,struts2就会自动把字符类型转换成相应的类型。 一.局部类型转换 1.名称格式:action类名+-conversion.properties 2.位置:放在与之相对应action类的同包下 3.properties文件内容格式:转换属性=转换处理类 4.转换处理类:继承StrutsTypeConverter实现convertFromString方法和convertToString方法 5.具体处理流程: (1)输入:HTML表单提交—Action类处理—执行属性setter方法—如果需要类型转换—找到properties文件—按照properties设置找到对应的转换类,调用其中convertFromString转换方法-把返回值通过setter方法给action中属性赋值。 (2)输出:Action类处理—执行属性getter方法—如果需要类型转换—找到properties文件—按照properties设置找到对应的转换类,调用其中convertToString转换方法-把返回值通过getter方法输出到页面。 二.全局类型转换(页面中所有用到改bean的都会被类型转换) 1.名称格式:xwork-conversion.properties 2.位置:src根目录下 3.properties文件内容格式:bean类=转换处理类 三.主要代码 1、xwork-conversion.properties(全局) #com.test.bean.Point=com.test.converter.PointConverter 2.PointAction-conversion.properties(局部) #point=com.test.converter.PointConverter #point2=com.test.converter.PointConverter #point3=com.test.converter.PointConverter #point=com.test.converter.PointConverter3 Java转换代码: PointConverter.Java package com.test.converter; import java.util.Map; import ognl.DefaultTypeConverter; import com.test.bean.Point; /** * @author 作者:zlp E-mail: jxzlp123@163.com * @version 创建时间:2010-9-12 下午01:21:30 * 类说明 */ public class PointConverter extends DefaultTypeConverter { @Override 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(); String result="[x="+x+", y="+y+"]"; return result; } return null; } } PointConverter2.Java package com.test.converter; import java.util.Map; import org.apache.struts2.util.StrutsTypeConverter; import com.test.bean.Point; /** * @author 作者:zlp E-mail: jxzlp123@163.com * @version 创建时间:2010-9-12 下午07:52:22 * 类说明 */ public class PointConverter2 extends StrutsTypeConverter { @Override public Object convertFromString(Map context, String[] values, Class toClass) { Point point=new Point(); String[] str=(String[])values; 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; } @Override public String convertToString(Map context, Object o) { Point point=(Point)o; int x=point.getX(); int y=point.getY(); String result="[ x = "+ x+", y ="+ y+"]"; return result; } } PointConverter3.Java package com.test.converter; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.apache.struts2.util.StrutsTypeConverter; import com.test.bean.Point; /** * @author 作者:zlp E-mail: jxzlp123@163.com * @version 创建时间:2010-9-12 下午08:39:35 * 类说明 */ public class PointConverter3 extends StrutsTypeConverter { @Override public Object convertFromString(Map context, String[] values, Class toClass) { List<Point> list=new ArrayList<Point>(); for (String value:values) { Point point=new Point(); String[] paramValues=value.split(","); int x=Integer.parseInt(paramValues[0]); int y=Integer.parseInt(paramValues[1]); point.setX(x); point.setY(y); list.add(point); } return list; } @SuppressWarnings("unchecked") @Override public String convertToString(Map context, Object o) { List<Point> list = (List<Point>) o; StringBuilder sb = new StringBuilder(); sb.append("[ "); int number = 0; for (Point point : list) { ++number; int x = point.getX(); int y = point.getY(); sb.append(number).append(" x=").append(x).append(",y=").append(y) .append(" "); } sb.append("]"); return sb.toString(); } } 在最后调用 <body> <h3><font color="red">用逗号将坐标分隔开</font></h3> <s:form action="pointConverter"> <s:textfield name="point.x" label="x"></s:textfield> <s:textfield name="point.y" label="y"></s:textfield> <s:textfield name="age" label="age"></s:textfield> <s:textfield name="username" label="username"></s:textfield> <s:textfield name="date" label="date"></s:textfield> <s:submit name="submit" label="submit"></s:submit> </s:form> </body> 时 在javabean中重写toString()方法 @Override public String toString() { return "x="+x+", y="+y; }