`

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;
  }
 }
}

 

0
1
分享到:
评论

相关推荐

    Struts2 in action中文版

    10.3.2 使用自定义数据验证器 229 10.4 验证框架的高级主题 230 10.4.1 在域对象级别验证 231 10.4.2 使用验证上下文优化验证 233 10.4.3 验证继承 235 10.4.4 验证短路效应 236 10.4.5 使用注解声明验证 237 10.5 ...

    图书管理系统-struts2

    (1) 图书管理系统可以按照用户权限和实现功能的不同分为两部分:外部学生对数据库的查阅访问和内部管理人员对图书记录的管理维护。 (2) 用户注册,需要通过Struts2字段校验判断用户注册页面中的用户名、密码、年龄...

    深入浅出Struts 2 .pdf(原书扫描版) part 1

    如数据类型转换、文件上传和下载、Struts2应用的安全性、调试与性能分析、FreeMarker、Velocily、Ajax,等等。跟随作者一道深入Struts2。聆听大量来之不易的经验之谈。你对Struts2开发框架的理解和应用水平都将更上...

    Java语言基础下载

    数据类型转换函数CAST和CONVERT 298 分组查询 299 五大约束 301 索引 303 数据库的备份与恢复 304 内容总结 308 独立实践 309 第十八章:数据库(三) 310 学习目标: 310 存储过程 311 触发器 313 函数 314 规则 ...

    java面试题

    答:多线程有两种实现方法,一种是继承Thread类或者实现Runnable接口。同步就是在方法返回类型后面加上synchronized。 c#中的委托,事件是不是委托? 答:委托就是将方法作为一个参数带入另一个方法叫做委托,事件...

    从J2SE到J2EE知识点介绍

    2. 两种实现方式 81 3. 生命周期及状态转换 84 4. 线程调度 85 5. 线程同步 92 三. Jsp 101 (一) myeclipse上配置Tomcat服务器 101 (二) Jsp+servlet+bean版HelloWorld概览 105 (三) Jsp基本页面标签 116 1. 标签 ...

    ssh(structs,spring,hibernate)框架中的上传下载

    可以确定的一点是:BlobByteArrayType不可能逾越Blob天生的操作方式,原来是BlobByteArrayType数据类型本身具体数据访问的功能,它通过LobHandler将两次数据访问的动作隐藏起来,使Blob字段的操作在表现上和其他一般...

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    所使用的应用服务器是jboss 5.1和weblogic 11g,详细介绍了这两种应用服务器的安装和使用,以及如何在两大主流服务器上安装、部署java ee应用。  本书内容主要包括三部分,第一部分介绍java ee开发的基础知识,...

    Java常见面试题208道.docx

    6.String 属于基础的数据类型吗? 7.java 中操作字符串都有哪些类?它们之间有什么区别? 8.String str="i"与 String str=new String(“i”)一样吗? 9.如何将字符串反转? 10.String 类的常用方法都有那些? 11....

    freemarker总结

    运算符的用法有如下两种: variable!或variable!defaultValue,第一种用法不给缺失的变量指定默认值,表明默认值是空字符串,长度为0的集合,或者长度为0的Map对象. 使用!指定默认值时,并不要求默认值的类型和变量类型...

    JAVA上百实例源码以及开源项目源代码

     通过网络或磁盘等方式,把公钥编码传送给李四,李四接收到张三编码后的公钥,将其解码,李四用张三的公钥加密信息,并发送给李四,张三用自己的私钥解密从李四处收到的信息…… Java利用DES私钥对称加密代码实例 ...

    JAVA上百实例源码以及开源项目

     通过网络或磁盘等方式,把公钥编码传送给李四,李四接收到张三编码后的公钥,将其解码,李四用张三的公钥加密信息,并发送给李四,张三用自己的私钥解密从李四处收到的信息…… Java利用DES私钥对称加密代码实例 ...

    Java学习笔记-个人整理的

    {1.6}数据类型转换}{26}{section.1.6} {1.7}方法}{26}{section.1.7} {1.8}运算符}{27}{section.1.8} {1.8.1}自增运算}{28}{subsection.1.8.1} {1.8.1.1}Postincrement}{28}{subsubsection.1.8.1.1} {1.8.1.2}...

    java开源包1

    使用redis作缓存时,支持list类型的高级数据结构,更适合论坛帖子列表这种类型的数据 5. 支持混合使用redis缓存和memcached缓存。可以将列表数据缓存到redis中,其他kv结构数据继续缓存到memcached 6. 支持redis的...

    java开源包11

    使用redis作缓存时,支持list类型的高级数据结构,更适合论坛帖子列表这种类型的数据 5. 支持混合使用redis缓存和memcached缓存。可以将列表数据缓存到redis中,其他kv结构数据继续缓存到memcached 6. 支持redis的...

    java开源包2

    使用redis作缓存时,支持list类型的高级数据结构,更适合论坛帖子列表这种类型的数据 5. 支持混合使用redis缓存和memcached缓存。可以将列表数据缓存到redis中,其他kv结构数据继续缓存到memcached 6. 支持redis的...

    java开源包3

    使用redis作缓存时,支持list类型的高级数据结构,更适合论坛帖子列表这种类型的数据 5. 支持混合使用redis缓存和memcached缓存。可以将列表数据缓存到redis中,其他kv结构数据继续缓存到memcached 6. 支持redis的...

Global site tag (gtag.js) - Google Analytics