`
wutheringsea
  • 浏览: 263347 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

[转] struts2日期在中文环境上提交正确,在英文环境上提交报错

阅读更多

由于Struts2匹配日期时,使用了Locale,服务器默认的语言环境是英语,就会出现日期类型转换异常,如果把中文设置为默认语言环境,再测试,没问题了。终于知道了原因。 
写一个日期类型转换器就行了! 
页面日期类型: 
Jsp代码  收藏代码
  1. 开始日期:<s:datetimepicker name="product.startDate"   displayFormat="yyyy-MM-dd"  />  

转换器如下: 
Java代码  收藏代码
  1. package cn.anycall.conversion;  
  2.   
  3. import java.text.ParseException;  
  4. import java.text.SimpleDateFormat;  
  5. import java.util.Date;  
  6. import java.util.Map;  
  7.   
  8. import ognl.DefaultTypeConverter;  
  9.   
  10. import org.apache.commons.lang.StringUtils;  
  11. import org.apache.commons.lang.time.DateUtils;  
  12. import org.apache.log4j.Logger;  
  13.   
  14.   
  15.   
  16.   
  17. public class DateConverter extends DefaultTypeConverter {  
  18.   
  19.     private static final Logger logger = Logger.getLogger(DateConverter.class);  
  20.   
  21.     private static final String DATETIME_PATTERN = "yyyy-MM-dd HH:mm:ss";  
  22.   
  23.     private static final String DATE_PATTERN = "yyyy-MM-dd";  
  24.       
  25.     private static final String MONTH_PATTERN = "yyyy-MM";  
  26.   
  27.     /** 
  28.      * Convert value between types 
  29.      */  
  30.     @SuppressWarnings("unchecked")  
  31.     public Object convertValue(Map ognlContext, Object value, Class toType) {  
  32.             Object result = null;  
  33.             if (toType == Date.class) {  
  34.                     try {  
  35.                         result = doConvertToDate(value);  
  36.                     } catch (ParseException e) {  
  37.                         // TODO Auto-generated catch block  
  38.                         e.printStackTrace();  
  39.                     }  
  40.             } else if (toType == String.class) {  
  41.                     result = doConvertToString(value);  
  42.             }  
  43.             return result;  
  44.     }  
  45.   
  46.     /** 
  47.      * Convert String to Date 
  48.      * 
  49.      * @param value 
  50.      * @return 
  51.      * @throws ParseException  
  52.      */  
  53.     private Date doConvertToDate(Object value) throws ParseException {  
  54.             Date result = null;  
  55.   
  56.             if (value instanceof String) {  
  57.                     result = DateUtils.parseDate((String) value, new String[] { DATE_PATTERN, DATETIME_PATTERN, MONTH_PATTERN });  
  58.   
  59.                     // all patterns failed, try a milliseconds constructor  
  60.                     if (result == null && StringUtils.isNotEmpty((String)value)) {  
  61.   
  62.                             try {  
  63.                                     result = new Date(new Long((String) value).longValue());  
  64.                             } catch (Exception e) {  
  65.                                     logger.error("Converting from milliseconds to Date fails!");  
  66.                                     e.printStackTrace();  
  67.                             }  
  68.   
  69.                     }  
  70.   
  71.             } else if (value instanceof Object[]) {  
  72.                     // let's try to convert the first element only  
  73.                     Object[] array = (Object[]) value;  
  74.   
  75.                     if ((array != null) && (array.length >= 1)) {  
  76.                             value = array[0];  
  77.                             result = doConvertToDate(value);  
  78.                     }  
  79.   
  80.             } else if (Date.class.isAssignableFrom(value.getClass())) {  
  81.                     result = (Date) value;  
  82.             }  
  83.             return result;  
  84.     }  
  85.   
  86.     /** 
  87.      * Convert Date to String 
  88.      * 
  89.      * @param value 
  90.      * @return 
  91.      */  
  92.     private String doConvertToString(Object value) {  
  93.             SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DATETIME_PATTERN);  
  94.             String result = null;  
  95.             if (value instanceof Date) {  
  96.                     result = simpleDateFormat.format(value);  
  97.             }  
  98.             return result;  
  99.     }  
  100. }  


可以将该转换器注册为全局的:在classpath下建立xwork-conversion.properties文件,内容为:java.util.Date=cn.anycall.conversion.DateConverter
分享到:
评论

相关推荐

    解决struts2日期标签乱码

    改正struts2日期标签乱码,个别月份显示问号!

    Struts2 框架搭建(基本)和几个报错问题

    在本文中,我们将深入探讨Struts2的基本搭建过程以及可能遇到的一些常见报错问题。 ### Struts2框架搭建步骤 1. **环境准备**:首先确保你的开发环境中已经安装了JDK和Apache Tomcat服务器。同时,为了进行开发,...

    解决Struts提交中文出现乱码和提交日期型数据报错的问题

    在开发过程中,开发者可能会遇到中文乱码和日期型数据提交时出错的问题。这些问题通常涉及到字符编码设置和数据类型转换。 首先,我们来讨论如何解决Struts提交中文出现乱码的问题。中文乱码通常与字符编码设置有关...

    struts2-json包集合 不会出现任何报错

    在标题中提到的"struts2-json包集合 不会出现任何报错",意味着这个压缩包集合包含了一组兼容的Struts2和JSON相关的库,可以避免常见的错误,特别是`textutils class找不到`的问题。 在描述中,提到了几个关键的包...

    解决Struts2中下载文件时点击取消按钮后台报错问题

    总结来说,解决Struts2中下载取消报错问题的关键在于正确管理和控制文件流,确保在客户端取消下载时,服务器能够及时响应并终止操作。通过监控`ServletResponse`的状态和`ServletOutputStream`的关闭情况,可以有效...

    传智播客struts2.1视频教程_介绍struts2及struts2开发环境的搭建

    它在Struts1的基础上进行了很多改进,提供了更强大的功能和更好的灵活性。本视频教程由传智播客提供,旨在帮助初学者理解Struts2的基础概念,并指导如何搭建Struts2的开发环境。 首先,我们要了解Struts2的核心概念...

    Struts2解决表单重复提交

    综上所述,Struts2框架提供了token机制以及灵活的跳转方式配置来解决表单重复提交的问题。开发者在使用时需要注意配置token相关标签和拦截器,并通过设置正确的结果视图跳转类型来防止因刷新页面导致的重复提交。...

    Struts2实例 国际化 类型转换 struts标签

    这个实例项目展示了如何在实际应用中结合Struts2、国际化、类型转换以及Struts2自定义标签来实现用户管理功能,包括用户数据的增删改查。 首先,我们来看Struts2的核心概念。Struts2作为MVC框架,它负责处理HTTP...

    struts2初始使用环境配置

    在开始使用Struts2之前,我们需要先进行环境配置。以下将详细介绍Struts2的初始使用环境配置步骤。 首先,确保你已经安装了Java Development Kit (JDK)。JDK是开发Java应用的基础,你需要至少JDK 1.6或以上版本来...

    Struts2防止重复提交解决方案

    在Struts2中,防止重复提交是一个重要的问题,因为它可能导致数据不一致性和服务器资源的浪费。本文将详细介绍如何在Struts2中解决这个问题,以及相关的技术概念。 首先,我们要理解Struts2中的拦截器(Interceptor...

    struts2 使用action属性接收中文参数(post提交)

    这篇名为“Struts2 使用action属性接收中文参数(post提交)”的博文可能讲述了如何在Struts2框架中正确处理中文POST请求。在处理中文参数时,主要涉及以下几个关键知识点: 1. **字符编码设置**: - 请求编码:...

    struts2令牌解决页面重复提交问题

    Struts2是一个流行的Java web框架,它为开发者提供了构建MVC(模型-视图-控制器)应用程序的强大工具。在Web开发中,一个常见的问题就是防止用户意外或恶意地重复提交表单,这可能导致数据的不一致性和服务器负载的...

    struts2批量提交数据

    在处理批量数据提交时,Struts2提供了一种高效的方法来管理并存储大量数据到数据库。本篇文章将深入探讨如何利用Struts2实现批量提交数据的功能。 ### 一、批量提交的概念 批量提交是指一次性处理多个数据记录,而...

    SSH2报错xception starting filter struts2

    严重: Exception starting filter struts2 java.lang.ClassNotFoundException: org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

    struts2 防止表单重复提交的例子

    通过以上方式,Struts2的Token机制有效地防止了表单的重复提交,保证了服务端的处理逻辑正确性和数据的一致性。在实际开发中,结合合理的前端提示,还可以提高用户体验,避免用户因误操作而产生的困扰。

    struts2环境搭建+struts2 新闻发布系统+struts2 留言板

    struts2环境搭建+struts2 新闻发布系统+struts2 留言板 struts2环境搭建:基础框架搭建,简单易上手,...struts2 留言板:struts2+jquery 直接导入myecplise中即可使用,很好用,可以在此基础上添加并完善项目将更完美。

    struts2环境搭建

    1. Java Development Kit (JDK):Struts2运行在Java平台上,所以你需要先安装JDK并配置好`JAVA_HOME`环境变量。 2. Apache Tomcat:一个流行的Java应用服务器,用于部署和运行web应用程序。下载并解压Tomcat到你选择...

    struts2 spring hibernate开发环境配置

    在配置Struts2、Spring和Hibernate的开发环境时,首先需要确保每个框架的基础环境已经准备就绪。对于Struts2,需要下载并引入相应的jar包,如struts2-core、xwork、ognl、commons-logging和freemarker等。然后,在`...

Global site tag (gtag.js) - Google Analytics