咱们就举point转换实例,其他的可以可以忽略,先简单的说一下没个文件代码什么样,最后简单讲解一下运行的原理过程是怎么样的。
1、配置好web.xml文件
2、input.jsp页面
依旧是应用struts2标签
<%@ taglib prefix="s" uri="/struts-tags"%>
<s:form action="pointConvertor"> <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="date"></s:textfield> <s:submit label="submit"></s:submit> </s:form>
3、output.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ taglib prefix="s" uri="/struts-tags" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Insert title here</title> </head> <body> point:<s:property value="point"/><br> age:<s:property value="age"/><br> username:<s:property value="username"/><br> date:<s:property value="date"/><br> </body> </html>
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; } }
5、再new一个PointConverter.java来具体操作相关的类型转化
package com.test.converter; import java.util.Map; import ognl.DefaultTypeConverter; import com.test.bean.Point; public class PointConverter extends DefaultTypeConverter { /* (non-Javadoc) * context: 类型转换环境的上下文 * value: 需要转换的参数 ,一般通常数组类型 * toType: 转换后的目标类型 * * @see ognl.DefaultTypeConverter#convertValue(java.util.Map, java.lang.Object, java.lang.Class) */ @Override public Object convertValue(Map context, Object value, Class toType) { /** * 目的:使用Set方法前把字符串转化为 Point类型 * */ if(Point.class == toType){ Point point = new Point() ; String [] str = (String[])value;//将value转换为String类型, 因为getParameterValues返回类型个数组,防止一样name的表单 String [] parameter = str[0].split(","); int x = Integer.parseInt(parameter[0]); int y = Integer.parseInt(parameter[1]); point.setX(x); point.setY(y); return point; } /** * 目的:使用Get方法前把Point方法转化为字符串类型 * */ else if(String.class == toType){ Point point = (Point)value; int x = point.getX(); int y = point.getY(); String str = "x= "+ x + " y= " + y; return str; } return null; } }
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; } @Override public String execute() throws Exception { return SUCCESS; } }
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC <span style="white-space:pre"> </span>"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" <span style="white-space:pre"> </span>"http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <span style="white-space:pre"> </span><package name="sturts2" extends="struts-default" namespace="/"> <span style="white-space:pre"> </span> <span style="white-space:pre"> </span><action name="pointConvertor" class="com.test.action.PointAction"> <span style="white-space:pre"> </span> <span style="white-space:pre"> </span><result name="success">output.jsp</result> <span style="white-space:pre"> </span> <span style="white-space:pre"> </span></action> <span style="white-space:pre"> </span> <span style="white-space:pre"> </span></package> </struts>
那么问题来了,关联技术哪家强?
src目录下PointAction-conversion.properties找
这里注意一下:PointAction-conversion.properties 和 PointAction.java前面必须是一样,后面的-conversion.properties 是固定的,千万别写错了
之后配置一下PointAction-conversion.properties 写上对哪个属性进行类型转换
point=com.test.converter.PointConverter
9、填写input.jsp测试一下
10、运行原理:
首先是读取web.xml文件 , 从inoput.jsp开始 输入信息提交 , 通过input.jsp的action 会自动调用struts 来匹配到相应的action,之后通过PointAction.java 对poin等属性 通过set方法赋值 , 在通过set方法赋值之前首先会检查PointAction-conversion.properties 里面有没有对相关setXXX里面的XXX 属性进行类型转换, 例如:point 在setPoint()之前会查找 PointAction-conversion.properties里面没有对point类型转换,没有直接赋值,如果有自动跳转到PointConverter.java转换后进行赋值。
都赋值成功后返回到output.jsp页面上了,output.jsp又要输出相应的字符串,又会把已经从String转化到Point的数据,进行Point转化到String的转换,同样如上,查找getXXX里面的XXX属性进行类型转换,例如:point 在getPoint()之前首先会查找 PointAction-conversion.properties里面没有对point类型转换,没有就直接取值,如果有自动跳转到PointConverter.java转换后进行取值。
如果本博客对你学习有一点点的帮助,请回复给予支持,谢谢