好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

Struts2的自动类型转换及自定义类型转换.doc

4页
  • 卖家[上传人]:平***
  • 文档编号:15620198
  • 上传时间:2017-11-05
  • 文档格式:DOC
  • 文档大小:55.25KB
  • / 4 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • Struts2 的自动类型转换及自定义类型转换2010 十一月 8tags: 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、局部类型转换器 提供如下格式的文件 文件名: ActionName-conversion.properties 内容:多个 propertyName(属性名) =类型转换器类(含包名),如 date=com.aumy.DateConverter 存放位置:和 ActionName 类相同路径 2、全局类型转换器 提供如下格式的文件 文件名: xwork-conversion.properties 内容: 多个“复合类型=对应类型转换器 ”项组成,如 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) { 17if (toType == Date.class) { //浏览器向服务器提交时,进行 STRING TO DATE 的转换 18 Date date = null; 19 String dateString = null; 20 String[] params = (String[])value; 21 dateString = params[0];//获取日期的字符串 22 for (DateFormat format : ACCEPT_DATE_FORMATS) { 23 try { 24return format.parse(dateString);//遍历日期支持格式,进行转换 25 } catch(Exception e) { 26 continue; 27 } 28 } 29 return null; 30 } 31else if (toType == String.class) { //服务器向浏览器输出时,进行 DATE TO STRING 的类型转换 32 Date date = (Date)value; 33return new SimpleDateFormat("yyyy-MM-dd").format(date);//输出的格式是 YYYY-MM-DD 34 } 35 36 return null; 37 } 38 } 2. 具体注册应用 局部配置: ActionName-conversion.properties 配置文件 1 java.util.Date=xxx.xxx.xxxx.DateTypeConverter 全局配置: xwork-conversion.properties 配置文件 1 java.util.Date=xxx.xxx.xxxx.DateTypeConverter 。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.