



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 菏泽银行面试题目及答案
- 2025年注册验船师资格考试(A级船舶检验专业基础环境与人员保护)综合试题及答案一
- 北京市门头沟区2023-2024学年七年级下学期第一次月考英语考试题目及答案
- 2025年图书馆管理员招聘面试模拟题及答题技巧
- 2025年医疗器械质量认证考试全真模拟题
- 2025年财务风险管理师高级实务操作手册及考试指南
- 2025年高空作业平台设计与使用技能考试题库及答案
- 2025年高中物理学科知识与教学能力面试题解
- 2025年政府机关招聘行政岗位笔试模拟题及答案
- 2026届江苏省无锡江阴市化学高三上期末教学质量检测模拟试题含解析
- 检验科生化培训课件
- 配电类“两种人”题库(2025年3月修编)改
- 假期返校安全教育
- 建设工程管理的毕业论文
- 中国工笔花鸟画技法课件
- 正面吊安全管理制度
- 中医辨证施护课件
- 学校十五五规划(同名11527)
- 高中心理健康测试题及答案大全
- 小学二年级上册《健康成长》全册教学设计
- 土建安全员c类考试试题及答案
评论
0/150
提交评论