



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
struts2类型转换Spring hibernate 2010-08-26 11:55:00 阅读35 评论0 字号:大中小 订阅 在struts2支持功能强大的类型转换,它通过提供了一个StrutsTypeConverter抽象类,它是DefaultTypeConverter类的子类,用户在使用时需要实现以下两个类convertFromString(Map context,String values,Class toType),它是字符串转换成复合类型,其中为了满足html中的多种请求参数形式如复合列表框,把参数values设成字符串数组形式。converttoString(Map context,Object o),它是从复合类型转换成字符串类型的方法实现了自定义类型转换器后,将该类型转换器注册在Web应用中,Struts2才能正常使用它。Struts2提供了3种注册方式:1. 注册成局部类型转换器在与*Action.class相同位置下提供一个ActionNperties的Properites,文件 由key-value组成,内容如下:propertyName=类型转换器类(需要加包前缀)2. 注册成全局类型转换器为了让系统中的多个Action重复使用类型转换器类,需要把类型转换器类设置成全局类型转换器:它需要在classes目录提供一个perties文件,内容由“复合类型=对应类型转换器”项组成,它们都需要提供完整的包前缀。3. 使用JDK1.5的注释来注册由于Struts2内建了OGNL表达式的支持,所以比较常用,简单的方式是把html的请求属性名直接设置成Action中VO的值.属性形式。比如一个User的Bean包括两个属性name和pass,在Action中它的变量为user变量对象,则在html表单中可以直接把请求参数名和user.pass,这样struts2就会自动转换。另外,Struts2支持数组,集合属性的类型转换器,其中在集合转换器中为了让系统了解集合中元素的类型,有两种方法:1. 使用泛型来限制集合的元素的类型。2. 使用了Struts2的配置文件,使用局部类型转换的配置文件来指定集合元素的数据类型,其中格式如下:对于List类型:Element_xxx=复合类型(xxx表示属性名,以下也是)而对于Set类型:Element_xxx=复合类型KeyProperty_xxx=name (其中name为set索引属性名)类型转换中错误处理:Struts内置了类型转换拦截器,它负责将对应错误封装成表单域错误信息(fieldErro),并将其放入ActionContext中。为了在input视图对应的页面中显示错误信息,只需要在页面中使用标签就可输出类型转换的错误信息,其中可以通过在应用的国际化资源文件中增加代码来修改类型转换失败后的提示信息:Xwork.default.invald.fieldvalue=0 字段类型转换失败!.(非西欧字符,需要用native2ascii转换)以上改变的是全局的错误信息提示,若需要对特定字段指定特别的提示信息,可以提供Action的局部资源文件,文件名为ActionNperties,在文件中增加一行如下项:Invald.fieldvalue.属性名=提示信息在使用struts2权威指南中,犯了两个错误:1. 在局部与全部类型转换配置文件中,给整晕了-在局部文件中写了包名.复合类型=类型转换器类 局部类型转换的配置文件中,红色部分为属性名2. 在写Action中的一个属性的getXXX方法,把它的访问使用private了,然后在结果的视图页面中就是无法显示其结果(能显示才怪呢),我找了半天找到这个小错误。struts2日期类型转换转!在Struts2中,一般的内置类型都会在由系统自动进行转换.但是Date类型好像有时候行,有时候不行。比如我这次,本地运行正常,一上测试服务器就不行了。因此要想保证系统一定要正确第对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 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 (toType = 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; else if (toType = String.class) /服务器向浏览器输出时,进行Date to String的类型转换 Date date = (Date)value; return new SimpleDateFormat(yyyy-MM-dd).format(date);/输出的格式是yyyy-MM-dd return null; 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 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 (toType = 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; else if (toType = String.class) /服务器向浏览器输出时,进行Date to String的类型转换 Date date = (Date)value; return new SimpleDateFormat(yyyy-MM-dd).format(date);/输出的格式是yyyy-MM-dd return null; 在根目录下创建perties文件,并在里面添加下面语句,注册类型转换器java.util.Date=com.great.util.DateConverter其中的com.great.util.DateConverter是日期转换类包含命名空间的全称。然后很多人就大功告成了。而我还没有成功,系统报错“ERROR (CommonsLogger.java:27) - Conversion registration error”“java.lang.ClassNotFoundException: com.great.util.DateConverter”注册类型转换器没有成功?仔细一检查发现“java.util.Date=com.great.util.DateConverter”的后面多了一个空格!真相大白了。去掉空格,再次运行,成功!struts的日期转换器对不同电脑会作出不同的转换,在开发人员电脑上没有问题,但到了部署服务器上却总是报类型无法转换的错误。网上找了很多资料都没有适合自己的日期转换器。只能自己参考着写一个了。了解了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.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 values, 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) 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 ; package com.iemis.dye.conver; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Map; import org.apache.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 values, Class toClass) if (values = null | values.length = 0) return null; /有时分秒的要先转换 SimpleDateForma
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电磁实验试题及答案
- 大学冷门试题及答案
- 创意飞机测试题及答案
- 初中光速测试题及答案
- 大学教材试题及答案
- 财富级别测试题及答案
- 财经法规面试题及答案
- 城轨英语试题及答案
- 不良库存处理及改进措施计划
- 探索远程工作实施方案的工作计划
- 1-059-职业技能鉴定指导书-继电保护(第二版)11-059职业技能鉴定指导书职业标准试题库
- 【宁波年报】2022年宁波房地产市场年报
- 运输供应商年度评价表
- 2023年海南省财金集团有限公司招聘笔试题库及答案解析
- 北京中考英语词汇表(1600词汇)
- 超市消防监控系统设计
- 封样管理规定
- 黄腐酸钾项目可行性研究报告-用于立项备案
- 管理人员责任追究制度
- 自动旋转门PLC控制
- 电影场记表(双机位)
评论
0/150
提交评论