Struts2的自动类型转换及自定义类型转换.doc_第1页
Struts2的自动类型转换及自定义类型转换.doc_第2页
Struts2的自动类型转换及自定义类型转换.doc_第3页
Struts2的自动类型转换及自定义类型转换.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Struts2 的自动类型转换及自定义类型转换 2010 十一月 8 tags: Struts, Struts2, 类型转换 by Ethan 为什么会有类型转换?为什么会有类型转换? HTTP 协议中传递的任何内容都是 String 类型的,所以一旦我们在服务器上需要一个非 String 类型的对象,例如:int 或者 Date,那么我们就需要在收到 HTTP 请求的数据的时候,首先将 String 类型的数据变换为我们需要的对应类型的数据,之后再使 用。这个过程就是类型转换 类型转换在 Struts2 中是透明的,即 Struts2 内置了类型转换机制。 一、概述一、概述 在 B/S 应用中,将字符串请求参数转换为相应的数据类型,是 MVC 框架提供的功能,而 Struts2 是很好的 MVC 框架实现者, 理所当然,提供了类型转换机制。 Struts2 的类型转换是基于 OGNL 表达式的,只要我们把 HTML 输入项(表单元素和其他 GET/POET 的参数)命名为合法的 OGNL 表达式,就可以充分利用 Struts2 的转换机制。 除此之外,Struts2 提供了很好的扩展性,开发者可以非常简单的开发自己的类型转换器,完成字符串和自定义复合类型之间 的转换。总之,Struts2 的类型转换器提供了非常强大的表现层数据处理机制,开发者可以利用 Struts2 的类型转换机制来完成任 意的类型转换。 二二.常规类型的转换常规类型的转换: 比如表单提交的信息有 用户名,生日, 年龄, Action 中对应的数据类型分别是 String, Date, int.没什么好说的, Struts2 会自动 完成. Struts2 内建了常用的类型转换器,如 String ,boolean,char,int,long,float,double,Date, 数组(假定元素是 String 类型), 集合(假 定元素是 String 类型,用 ArrayList 封装) 实现自定义类型转换器 实现 TypeCoverter 接口,或者继承 DefaultTypeConverter 实现类(该类实现了 TypeCoverter 接口),通过继承该实现类 来实现自己的类型转换器。重写 convertValue 方法即可。 为了简化类型转换器的实现,Struts2 提供了一个 StrutsTypeConverter 抽象类,这个抽象类是 DefaultConverter 的子类。实 现了方法,并提供了 2 个不同转换方向的方法:Object convertToString(Map context,String values,Class toClass)和 String convertFromString(Map context,Object o)。 三、注册应用三、注册应用 实现了自定义类型转换器之后,将该类型转换器注册在 Web 应用中,Struts2 框架才可以正常使用该类型转换器。 关于类型转换器的注册方式,主要有 3 中: A、注册局部类型转换器:仅仅对某个 Action 的属性起作用。 B、注册全局类型转换器:对所有 Action 的特定类型的属性都会生效。 1、局部类型转换器 提供如下格式的文件 文件名: ActionNperties 内容:多个 propertyName(属性名)=类型转换器类(含包名),如 date=com.aumy.DateConverter 存放位置:和 ActionName 类相同路径。 2、全局类型转换器 提供如下格式的文件 文件名: perties 内容: 多个“复合类型对应类型转换器”项组成,如 java.Util.Date=com.aumy.DateConverter 存放位置:WEB-INF/classes/目录下。 四、应用示例四、应用示例 由于 Struts2 对日期转换显示时,会显示日期和时间,现在项目只需要显示日期,所以采用自定义的类型转换器来实现日期显 示。 1、类型转换类 01 import java.text.DateFormat; 02 import java.text.SimpleDateFormat; 03 import java.util.Date; 04 import java.util.Map; 05 06 import com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter; 07 08 public class DateTypeConverter extends DefaultTypeConverter 09 private static final DateFormat ACCEPT_DATE_FORMATS = 10 new SimpleDateFormat(“dd/MM/yyyy“), 11 new SimpleDateFormat(“yyyMMdd“), 12 new SimpleDateFormat(“yyyy-MM-dd“), 13 new SimpleDateFormat(“yyyy/MM/dd“) ; /支持转换的日期格式 14 15 Override 16 public Object convertValue(Map context, Object value, Class toType) 17 if (toType = Date.class) /浏览器向服务器提交时,进行 STRING TO DATE 的转换 18 Date date = null; 19 String dateString = null; 20 String params = (String)value; 21 dateString = params0;/获取日期的字符串 22 for (DateFormat format : ACCEPT_DATE_FORMATS) 23 try 24 return format.parse(dateString);/遍历日期支持格式, 进行转换 25 catch(Exception e) 26 continue; 27 28 29 return null; 30 31 else if (toType = String.class) /服务器向浏览器输出时,进 行 DATE TO STRING 的类型转换 32 Date date = (Date)value; 33 return new SimpleDateFormat(“yyyy-MM-dd“).format(date);/ 输出的格式是 YYYY-MM-DD 34 35 36 return null; 37 38 2. 具体注册应用 局部配置: ActionName-conversion

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论