三. StrutsTypeConverter 实现类型转换
三.一 StrutsTypeConverter 类定义
public abstract class StrutsTypeConverter extends DefaultTypeConverter{ //有两个抽像的方法,需要重写 //转换成对象 public abstract Object convertFromString(Map paramMap, String[] paramArrayOfString, Class paramClass); //转换成字符串 public abstract String convertToString(Map paramMap, Object paramObject); }
我们用 坐标转换这个功能 吧。
三.二 坐标转换功能展示 StrutsTypeConverter 类型转换
三.二.一 自定义 Point 类
package com.yjl.pojo; /** @Date: 2019年3月27日 @author: 两个蝴蝶飞 @Description:Struts类型转换器的自定义类 */ public class Point { /** * @param x 经坐标 * @param y 纬坐标 */ private float x; private float y; public float getX() { return x; } public void setX(float x) { this.x = x; } public float getY() { return y; } public void setY(float y) { this.y = y; } @Override public String toString() { return "Point [x=" + x + ", y=" + y + "]"; } }
三.二.二 编写控制器 MyAction2
package com.yjl.web.action; import com.opensymphony.xwork2.ActionSupport; import com.yjl.pojo.Point; /** @Date: 2019年3月25日 @author: yuejl @Description:自定义类型转换 */ public class MyAction2 extends ActionSupport{ private static final long serialVersionUID = 1L; private Point point; @Override public String execute() throws Exception { System.out.println("输出点:"+point.toString()); //这个是对象 return SUCCESS; } public Point getPoint() { return point; } public void setPoint(Point point) { this.point = point; } }
三.二.三 配置struts.xml
<action name="MyAction2" class="com.yjl.action.MyAction2"> <result>/WEB-INF/content/show2.jsp</result> </action>
三.二.四 编写类型转换器 PointTypeConverter
package com.yjl.conversion; import java.util.Map; import org.apache.struts2.util.StrutsTypeConverter; import com.yjl.pojo.Point; /** @Date: 2019年3月27日 @author: yuejl @Description:Point类型转换 */ public class PointTypeConversion extends StrutsTypeConverter{ /** * 字符串转换成相应的对象类型 */ @Override public Object convertFromString(Map arg0, String[] arg1, Class arg2) { System.out.println("值是:"+arg1[0]); String [] values=arg1[0].split(","); Point p=new Point(); p.setX(Float.parseFloat(values[0])); p.setY(Float.parseFloat(values[1])); return p; } /** * 由对象转换成相应的字符串 */ @Override public String convertToString(Map arg0, Object arg1) { Point point=(Point) arg1; return "[经坐标:"+point.getX()+",纬坐标:"+point.getY()+"]"; } }
三.二.五 编写类型转换文件
MyAction2-conversion.properties 文件
##Action属性=全限定名称 point=com.yjl.conversion.PointTypeConversion
三.二.六 编写前端页面
三.二.六.一 编写 /content/mypoint.jsp
<s:form action="MyAction2" method="post" namespace="/"> 点:<input type="text" name="point"> <s:submit value="提交" /> </s:form>
输入的格式用 , 进行分隔 。
三.二.六.二 编写/content/show2.jsp
<body> <s:property value="point"/> </body>
三.二.七 验证
输入网址: http://localhost:8080/Struts_Converter/mypoint
输入郑州坐标: 113.62,34.75
点击确定按钮:
控制台打印输出:
前端页面显示:
通过 StrutsTypeConverter 方式,也实现了类型转换的效果。
四. 全局类型转换
上面的方式 ,都是局部类型转换, 而自定义的类型,一般是在整个项目中通用的,故常常使用的是 全局类型转换。 JDK自带的类,一般用局部类型转换,重新设计。
全局类型转换,与局部类型转换差不多,只是 局部的,写得是ActionName,
而全局的,必须是 xwork-conversion.properites 文件名。
另外,局部的是: Action属性名=要转换的类型转换器的全限定名称,
而全局的是: 自定义的类全限定名称=要转换的类型转换器的全限定名称
需要放置在 src 目录下。
配置 Point 类的全局类型转换:
放置在 src目录下, 文件名称为: xwork-conversion.properties
内容为:
##自定义的类全限定名称=要转换的类型转换器的全限定名称 ## 对Point 类进行转换 com.yjl.pojo.Point=com.yjl.conversion.PointTypeConversion
提示: 当对一个自定义类型,既使用局部类型转换器,又使用全局类型转换时,会报错。
本章节的代码链接为:
链接:https://pan.baidu.com/s/1vp9oE2FZCLfFM-JueaSM7g 提取码:3ftv
谢谢您的观看!!!