收藏 分享(赏)

struts2自定义类型转换器.doc

上传人:wspkg9802 文档编号:6614310 上传时间:2019-04-18 格式:DOC 页数:4 大小:21.86KB
下载 相关 举报
struts2自定义类型转换器.doc_第1页
第1页 / 共4页
struts2自定义类型转换器.doc_第2页
第2页 / 共4页
struts2自定义类型转换器.doc_第3页
第3页 / 共4页
struts2自定义类型转换器.doc_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

1、struts2 类型转换Spring hibernate 2010-08-26 11:55:00 阅读 35 评论 0 字号:大中小 订阅 在 struts2 支持功能强大的类型转换,它通过提供了一个 StrutsTypeConverter 抽象类,它是DefaultTypeConverter 类的子类,用户在使用时需要实现以下两个类convertFromString(Map context,String values,Class toType),它是字符串转换成复合类型,其中为了满足 html 中的多种请求参数形式如复合列表框,把参数 values 设成字符串数组形式。converttoSt

2、ring(Map context, Object o),它是从复合类型转换成字符串类型的方法实现了自定义类型转换器后,将该类型转换器注册在 Web 应用中,Struts2 才能正常使用它。Struts2 提供了 3 种注册方式:1. 注册成局部类型转换器在与*Action.class 相同位置下提供一个 ActionName-conversion.properties 的 Properites,文件 由 key-value 组成,内容如下:propertyName=类型转换器类( 需要加包前缀)2. 注册成全局类型转换器为了让系统中的多个 Action 重复使用类型转换器类,需要把类型转换器类

3、设置成全局类型转换器:它需要在 classes 目录提供一个 xwork-conversion.properties 文件,内容由“复合类型=对应类型转换器 ”项组成,它们都需要提供完整的包前缀。3. 使用 JDK1.5 的注释来注册由于 Struts2 内建了 OGNL 表达式的支持,所以比较常用,简单的方式是把 html 的请求属性名直接设置成 Action 中 VO 的值.属性形式。比如一个 User 的 Bean 包括两个属性 name 和 pass,在 Action 中它的变量为 user 变量对象,则在 html 表单中可以直接把请求参数名 user.name 和 user.pas

4、s,这样 struts2 就会自动转换。另外,Struts2 支持数组,集合属性的类型转换器,其中在集合转换器中为了让系统了解集合中元素的类型,有两种方法:1. 使用泛型来限制集合的元素的类型。2. 使用了 Struts2 的配置文件,使用局部类型转换的配置文件来指定集合元素的数据类型,其中格式如下:对于 List 类型:Element_xxx=复合类型(xxx 表示属性名,以下也是)而对于 Set 类型:Element_xxx=复合类型KeyProperty_xxx=name (其中 name 为 set 索引属性名)类型转换中错误处理:Struts 内置了类型转换拦截器,它负责将对应错误封

5、装成表单域错误信息(fieldErro) ,并将其放入 ActionContext 中。为了在 input 视图对应的页面中显示错误信息,只需要在页面中使用 标签就可输出类型转换的错误信息,其中可以通过在应用的国际化资源文件中增加代码来修改类型转换失败后的提示信息:Xwork.default.invald.fieldvalue=0 字段类型转换失败!.(非西欧字符,需要用 native2ascii转换)以上改变的是全局的错误信息提示,若需要对特定字段指定特别的提示信息,可以提供Action 的局部资源文件,文件名为 ActionName.properties,在文件中增加一行如下项:Inval

6、d.fieldvalue.属性名=提示信息在使用struts2 权威指南中,犯了两个错误:1. 在局部与全部类型转换配置文件中,给整晕了-在局部文件中写了包名. 复合类型=类型转换器类 局部类型转换的配置文件中,红色部分为属性名2. 在写 Action 中的一个属性的 getXXX 方法,把它的访问使用 private 了,然后在结果的视图页面中就是无法显示其结果(能显示才怪呢) ,我找了半天找到这个小错误。 。 。struts2 日期类型转换转!在 Struts2 中,一般的内置类型都会在由系统自动进行转换.但是 Date 类型好像有时候行,有时候不行。比如我这次,本地运行正常,一上测试服务

7、器就不行了。因此要想保证系统一定要正确第对 Date 类型进行转换,就要写一个全局的类型转换类,进行 Date 与 String 之间的类型转换。这个转换类是从网上看的:package com.great.util; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Map; import com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter; public class

8、DateConverter extends DefaultTypeConverter private static final DateFormat ACCEPT_DATE_FORMATS = new SimpleDateFormat(“dd/MM/yyyy“), new SimpleDateFormat(“yyyy-MM-dd“), new SimpleDateFormat(“yyyy/MM/dd“) ; /支持转换的日期格式 Override public Object convertValue(Map context, Object value, Class toType) if (to

9、Type = Date.class) /浏览器向服务器提交时,进行 String to Date 的转换 Date date = null; String dateString = null; String params = (String)value; dateString = params0;/获取日期的字符串 for (DateFormat format : ACCEPT_DATE_FORMATS) try return format.parse(dateString);/遍历日期支持格式,进行转换 catch(Exception e) continue; return null; el

10、se if (toType = String.class) /服务器向浏览器输出时,进行 Date to String 的类型转换 Date date = (Date)value; return new SimpleDateFormat(“yyyy-MM-dd“).format(date);/输出的格式是 yyyy-MM-dd return null; 在根目录下创建 xwork-conversion.properties 文件,并在里面添加下面语句,注册类型转换器java.util.Date=com.great.util.DateConverter其中的 com.great.util.Dat

11、eConverter 是日期转换类包含命名空间的全称。然后很多人就大功告成了。而我还没有成功,系统报错“ERROR (CommonsLogger.java:27) - Conversion registration error”“java.lang.ClassNotFoundException: com.great.util.DateConverter”注册类型转换器没有成功?仔细一检查发现“java.util.Date=com.great.util.DateConverter”的后面多了一个空格!真相大白了。去掉空格,再次运行,成功!struts 的日期转换器对不同电脑会作出不同的转换,在开

12、发人员电脑上没有问题,但到了部署服务器上却总是报类型无法转换的错误。网上找了很多资料都没有适合自己的日期转换器。只能自己参考着写一个了。了解了 struts2 转换器的原理后其实也不难。下面分享下,一个转换没有时分秒日期,和有时分秒日期两种类型的日期转换器代码。Java 代码 package com.iemis.dye.conver; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Map; import org.apache.

13、struts2.util.StrutsTypeConverter; public class DateConverter extends StrutsTypeConverter private static final String FORMATDATE = “yyyy-MM-dd“; private static final String FORMATTIME = “yyyy-MM-dd HH:mm:ss“; SuppressWarnings(“unchecked“) Override public Object convertFromString(Map context, String v

14、alues, Class toClass) if (values = null | values.length = 0) return null; /有时分秒的要先转换 SimpleDateFormat sdf = new SimpleDateFormat(FORMATTIME); Date date = null; String dateString = values0; if (dateString != null) try date = sdf.parse(dateString); catch (ParseException e) date = null; if(date = null)

15、 sdf = new SimpleDateFormat(FORMATDATE); try date = sdf.parse(dateString); catch (ParseException e) date = null; return date; SuppressWarnings(“unchecked“) Override public String convertToString(Map context, Object o) if (o instanceof Date) SimpleDateFormat sdf = new SimpleDateFormat(FORMATTIME); return sdf.format(Date)o); return “; xwork-conversion.properties中加入 java.util.Date=com.iemis.dye.conver.DateConverter特别提醒:java.util.Date 要写全名,有很多人可能容易写成 java.lang.Date

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报