首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

struts2学习札记四(第4讲.Struts2的类型转换续)

2012-10-27 
struts2学习笔记四(第4讲.Struts2的类型转换续)struts2中的局部类型转换新的需求:用户需要同时增加三个点

struts2学习笔记四(第4讲.Struts2的类型转换续)
struts2中的局部类型转换

新的需求:用户需要同时增加三个点的坐标。
一、找到之前创建的input.jsp页面,再增加两个textfield,用于输入新增的两个点的坐标:

 <body><h3><font color="red">使用逗号将点的两个坐标分隔开</font></h3><s:form action="pointConverter"><s:textfield name="point" label="point"></s:textfield><s:textfield name="point2" label="point2"></s:textfield><s:textfield name="point3" label="point3"></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 label="submit"></s:submit></s:form>  </body>

二、在之前创建的类PointAction添加Point类型的两个属性:
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 Point point2;private Point point3;private int age;private String username;private Date date;public Point getPoint() {return point;}public void setPoint(Point point) {this.point = point;}public Point getPoint2() {return point2;}public void setPoint2(Point point2) {this.point2 = point2;}public Point getPoint3() {return point3;}public void setPoint3(Point point3) {this.point3 = point3;}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;}@Overridepublic String execute() throws Exception {return SUCCESS;}}

三、找到之前创建的属性文件:PointAction-conversion.properties
,同样的要增加两个类型转换的映射:
point=com.test.converter.PointConverterpoint2=com.test.converter.PointConverterpoint3=com.test.converter.PointConverter

四、找到之前的结果页面output.jsp:
<body>    point:<s:property value="point"/><br>    point2:<s:property value="point2"/><br>    point3:<s:property value="point3"/><br>    age:<s:property value="age"/><br>    username:<s:property value="username"/><br>    date:<s:property value="date"/>  </body>

效果图如下:








struts2中的全局类型转换
一、在src目录下创建xwork-conversion.properties文件(全局的属性文件):
com.test.bean.Point=com.test.converter.PointConverter

注释掉PointAction-conversion.properties
中的内容如下:
#point=com.test.converter.PointConverter#point2=com.test.converter.PointConverter#point3=com.test.converter.PointConverter

重新运行的结果是和上面的局部运行的结果一致。

二、在com.test.converter包中创建PointConverter2.java类继承自StrutsTypeConverter类:
package com.test.converter;import java.util.Map;import org.apache.struts2.util.StrutsTypeConverter;import com.test.bean.Point;public class PointConverter2 extends StrutsTypeConverter {@Overridepublic Object convertFromString(Map context, String[] values, Class toClass) {Point point = new Point();String[] paramValues = values[0].split(",");int x = Integer.parseInt(paramValues[0]);int y = Integer.parseInt(paramValues[1]);point.setX(x);point.setY(y);return point;}@Overridepublic 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;}}

三、同时修改xwork-conversion.properties文件中的配置信息:
com.test.bean.Point=com.test.converter.PointConverter2

增加新的需求,在PointAction类中声明一个List集合类型对象Point:
一、修改PointAction类中的代码:
package com.test.action;import java.util.Date;import java.util.List;import com.opensymphony.xwork2.ActionSupport;import com.test.bean.Point;public class PointAction extends ActionSupport{//private Point point;//private Point point2;//private Point point3;private List<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 Point getPoint2() //{//return point2;//}////public void setPoint2(Point point2) //{//this.point2 = point2;//}////public Point getPoint3() //{//return point3;//}////public void setPoint3(Point point3) {//this.point3 = point3;//}public List<Point> getPoint() {return point;}public void setPoint(List<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;}@Overridepublic String execute() throws Exception {return SUCCESS;}}

二、修改输入页面input.jsp:
<body><h3><font color="red">使用逗号将点的两个坐标分隔开</font></h3><s:form action="pointConverter"><s:textfield name="point" label="point"></s:textfield><s:textfield name="point" label="point2"></s:textfield><s:textfield name="point" label="point3"></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 label="submit"></s:submit></s:form>  </body>

三、在com.test.converter包下创建PointConverter3.java类:
package com.test.converter;import java.util.*;import org.apache.struts2.util.StrutsTypeConverter;import com.test.bean.Point;public class PointConverter3 extends StrutsTypeConverter {@Overridepublic 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;}@Overridepublic 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();}}


四、修改PointAction-conversion.properties:
#point=com.test.converter.PointConverter#point2=com.test.converter.PointConverter#point3=com.test.converter.PointConverterpoint=com.test.converter.PointConverter3

五、修改注释掉这里的代码xwork-conversion.properties:
#com.test.bean.Point=com.test.converter.PointConverter3

六、修改输出页面output.jsp:
 <body>    point:<s:property value="point"/><br>       age:<s:property value="age"/><br>    username:<s:property value="username"/><br>    date:<s:property value="date"/>  </body>

最终显示效果:


热点排行