Struts2实现类型转换器(十五)下

简介: Struts2实现类型转换器(十五)

三. 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


20200419112024616.png


点击确定按钮:


控制台打印输出:


20200419112029598.png


前端页面显示:


20200419112034211.png


通过 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


谢谢您的观看!!!

相关文章
|
Java
Java面向对象(12)--对象类型转换 (Casting )
Java面向对象(12)--对象类型转换 (Casting )
139 0
Java面向对象(12)--对象类型转换 (Casting )
|
前端开发 API
Struts2实现类型转换器(十五)上
Struts2实现类型转换器(十五)
240 0
Struts2实现类型转换器(十五)上
|
前端开发 Java 应用服务中间件
Struts2配置异常错误处理(十六)上
Struts2配置异常错误处理(十六)
372 0
Struts2配置异常错误处理(十六)上
Struts2配置异常错误处理(十六)下
Struts2配置异常错误处理(十六)
224 0
Struts2配置异常错误处理(十六)下
|
前端开发 Java 数据库连接
SpringMVC的数据验证和JSR 303国际化显示(十一)下
SpringMVC的数据验证和JSR 303国际化显示(十一)下
377 0
SpringMVC的数据验证和JSR 303国际化显示(十一)下
|
前端开发 Java 数据库连接
SpringMVC的数据验证和JSR 303国际化显示(十一)中
SpringMVC的数据验证和JSR 303国际化显示(十一)中
215 0
SpringMVC的数据验证和JSR 303国际化显示(十一)中
|
前端开发 JavaScript Java
SpringMVC的数据验证和JSR 303国际化显示(十一)上
SpringMVC的数据验证和JSR 303国际化显示(十一)上
222 0
SpringMVC的数据验证和JSR 303国际化显示(十一)上
|
Web App开发 前端开发 Java
SSM-SpringMVC-28:SpringMVC类型转换之自定义日期类型转换器
     ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------         例子很简易,要明白的是思路,话不多说,开讲 上篇博客不是说springmvc默认的日期转换格式是yyyy/MM/dd吗?如果我们要别的格式怎么办?(例如yyyyM...
1494 0