1,新建一个Point类,包含两个变量x,y。只有set,get方法
package com.test.bean; public class Point { private int x; private int y; public int getX() { return x; } public void setX(int x) { this.x = x; } public int getY() { return y; } public void setY(int y) { this.y = y; } }
2,新建input.jsp文件
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%> <%@ taglib prefix="s" uri="/struts-tags"%> <html> <body> <!-- 1,用户输入合法的Point类型的数据后,根据struts.xml文件的配置,会跳转到PointAction.java中处理 --> <!-- 2,PointAction在setPoint时发现在action目录下有一个PointAction-conversion.properties文件, <!-- 此时Struts知道会到PointConverter类中去做类型转换,变成 Point类型 --> <!-- 3,转换完成后,执行PointAction类中的execute转到output.jsp页面,output.jsp取PointAction页面的getPoint方法的返回值 --> <!-- 4,在得到返回值前,需要先到PointConverter方法再做类型转换,变成String类型 --> <!-- 5,如何确认哪个JavaBean对应哪个转换器?这是在xwork-conversion.properties中设置的 --> <!-- 6,如果想给某个实例指定特定的转换器,就在同个包目录下,建立 类名+"-conversion.properties"文件,如Point2Action-conversion.properties --> <s:form action="pointConvert"> <s:textfield name="point" label="point"></s:textfield> <s:textfield name="age" label="age"></s:textfield> <s:textfield name="username" label="username"></s:textfield> <s:textfield name="date" label="birthday"></s:textfield> <s:submit></s:submit> </s:form> </body> </html>
3,建立转换类
package com.test.convert; import java.util.Map; import ognl.DefaultTypeConverter; import com.test.bean.Point; public class PointConvert extends DefaultTypeConverter { /** * 根据toType的类型来判断是从客户端到服务器端,还是从服务器端到客户端 */ public Object convertValue(Map context, Object value, Class toType) { //从客户端到服务端 if (Point.class == toType) { Point point = new Point(); String[] str = (String[]) value; String[] paramString = str[0].split(","); int x = Integer.parseInt(paramString[0]); int y = Integer.parseInt(paramString[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 resultString = "[x=" + x + ",y=" + y + "]"; return resultString; } return null; } }
4,建PointAction
package com.test.action; import java.util.Date; import com.opensymphony.xwork2.ActionSupport; import com.test.bean.Point; public class PointAction extends ActionSupport { private Point point; private int age; private String username; private Date date; public Point getPoint() { return point; } public void setPoint(Point point) { this.point = point; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } public String execute() throws Exception { return SUCCESS; } }
5,建指定类型转换配置文件PointAction-conversion.properties,放在action目录下
point=com.test.convert.PointConvert
6,配置struts.xml文件
<action name="pointConvert" class="com.test.action.PointAction"> <result name="success">/output.jsp</result> <result name="input">/input.jsp</result> </action>