struts自定义数据类型转换的两种方式的对比

    对于自定义类型转换类,可以利用struts框架提供的“org.apache.struts2.util.StrutsTypeConverter ”抽象类,它是“ognl.DefaultTypeConverter ”的抽象子类,有两个方法,一个是表单参数转换成属性对应数据类类型的方法,另一个是属性数据类型转换成表单字符串类型。相比于直接继承“ognl.DefaultTypeConverter ”类进行自定义类型转换类,继承StrutsTypeConverter类更加直观,因为它把两个不同转换过程封装成两个不同的方法,而在DefaultTypeConverter 类中,是通过if~~~else~~~进行分类转换,容易出错。

  以下是两种不同方式的对比代码,以转换成point(坐标)类型为例:

 

①通过继承StrutsTypeConverter 类设计自定义的类型转换类

package com.hzp.converter;

import java.util.Map;
import org.apache.struts2.util.StrutsTypeConverter;
import com.hzp.bean.Point;

public class ConvertPoint2 extends StrutsTypeConverter {

 public Object convertFromString(Map map, String[] value, Class toType) {
  // 从表单转换成对应属性类型
  String[] str = (String[]) value;
  String p = str[0];
  String[] strPoint = p.split(",");
  Point point = new Point();
  point.setX(Integer.parseInt(strPoint[0]));
  point.setY(Integer.parseInt(strPoint[1]));
  return point;
 }

 public String convertToString(Map map, Object o) {
  //从属性对象转化成表单string类型
  Point point = (Point) o;
  String x = Integer.toString(point.getX());
  String y = Integer.toString(point.getY());
  String result = "(" + x + "," + y + ")";
  return result;
 }
}

 

②直接继承DefaultTypeConverter 类设计自定义类型转化类

package com.hzp.converter;

import java.util.Map;
import com.hzp.bean.Point;
import ognl.DefaultTypeConverter;

public class ConvertPoint extends DefaultTypeConverter {

 public Object convertValue(Map context, Object value, Class toType) {
  //从表单转换成对应属性类型
  if (Point.class == toType) {
   String[] str = (String[]) value;
   String p = str[0];
   String[] strPoint = p.split(",");
   Point point = new Point();
   point.setX(Integer.parseInt(strPoint[0]));
   point.setY(Integer.parseInt(strPoint[1]));
   return point;

  } 
  //从对应属性类型转换成字符串给显示页面
  else if(String.class == toType) {
   Point point = (Point) value;
   String x = Integer.toString(point.getX());
   String y = Integer.toString(point.getY());
   String result = "(" + x + "," + y + ")";
   return result;
  } else {
   return null;
  }
 }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值