`
kabuchino
  • 浏览: 76561 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

关于struts2英文版日期提交错误[转载]

阅读更多
【转载】:英文环境下 Struts2 日期格式转换的问题
地址:http://blog.csdn.net/liuzhenfeng/article/details/6605045


在使用Struts2进行开发的过程中,我们经常会使用Struts2自带的类型转换器,这些类型转换器也实在简化了我们的开发,但是,有时它们也会出现一些问题。例如,


<input id="startTime" name="startTime"  readonly onfocus="WdatePicker()"
      value="${startTime }"></input>(日期格式设置为“yyyy-MM-dd”)


Action的属性定义为: private Date startTime ;

这样在中文环境(locale)的系统中使用并没有什么问题,但是,在英文环境的系统中就会有异常抛出。原因是在英文环境中没有“yyyy-MM-dd”格式的日期,所以转换过程就会抛出异常。

既然知道了产生异常的原因,就有办法解决了,写一个日期转换器就行了。
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;

import ognl.DefaultTypeConverter;

import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.time.DateUtils;
import org.apache.log4j.Logger;

public class DateConverter extends DefaultTypeConverter {

	private static final Logger logger = Logger.getLogger(DateConverter.class);

	private static final String DATETIME_PATTERN = "yyyy-MM-dd HH:mm:ss";

	private static final String DATE_PATTERN = "yyyy-MM-dd";

	private static final String MONTH_PATTERN = "yyyy-MM";

	/**
	 * Convert value between types
	 */
	@SuppressWarnings("unchecked")
	public Object convertValue(Map ognlContext, Object value, Class toType) {
		Object result = null;
		if (toType == Date.class) {
			try {
				result = doConvertToDate(value);
			} catch (ParseException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		} else if (toType == String.class) {
			result = doConvertToString(value);
		}
		return result;
	}

	/**
	 * Convert String to Date
	 * 
	 * @param value
	 * @return
	 * @throws ParseException
	 */
	private Date doConvertToDate(Object value) throws ParseException {
		Date result = null;

		if (value instanceof String) {
			result = DateUtils.parseDate((String) value, new String[] {
					DATE_PATTERN, DATETIME_PATTERN, MONTH_PATTERN });

			// all patterns failed, try a milliseconds constructor
			if (result == null && StringUtils.isNotEmpty((String) value)) {

				try {
					result = new Date(new Long((String) value).longValue());
				} catch (Exception e) {
					logger.error("Converting from milliseconds to Date fails!");
					e.printStackTrace();
				}

			}

		} else if (value instanceof Object[]) {
			// let's try to convert the first element only
			Object[] array = (Object[]) value;

			if ((array != null) && (array.length >= 1)) {
				value = array[0];
				result = doConvertToDate(value);
			}

		} else if (Date.class.isAssignableFrom(value.getClass())) {
			result = (Date) value;
		}
		return result;
	}

	/**
	 * Convert Date to String
	 * 
	 * @param value
	 * @return
	 */
	private String doConvertToString(Object value) {
		SimpleDateFormat simpleDateFormat = new SimpleDateFormat(
				DATETIME_PATTERN);
		String result = null;
		if (value instanceof Date) {
			result = simpleDateFormat.format(value);
		}
		return result;
	}
}


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

另外,有人说直接在struts.xml 中定义常量,将locale设置为"zh_CN"也能解决该问题。

补充说明:
项目中,有碰到其他同事,用"yyyy-MM-dd HH:mm:ss "来做格式化的,提交的时候总是异常。
后来在做转化的时候,需要用string的trim来删去前后空格。
分享到:
评论

相关推荐

    Struts2 英文版

    8. **异常处理**:Struts2提供了一套完善的异常处理机制,可以捕获和管理应用程序中的异常,通过配置错误页面或Action,确保在出现错误时提供适当的反馈。 9. **测试支持**:Struts2提供了JUnit集成,使得单元测试...

    Struts2 英文教程

    通过这样的配置,当应用程序中发生未捕获的异常时,Struts2会自动跳转到/error.jsp页面,显示错误信息。 #### 总结 Struts2作为一款先进的MVC框架,不仅简化了Web应用程序的开发流程,还提高了代码的可维护性和可...

    struts2 in action 中文版 英文版 源代码 合集

    《Struts2 in Action》是一本深入介绍该框架的专业书籍,无论是中文版还是英文版,都为读者提供了全面理解和实践Struts2的知识。 中文版的《Struts2 in Action》为中文阅读者提供了方便,使得理解复杂的框架概念变...

    Struts2 格式化日期、时间和数字

    在Struts2框架中,处理日期、时间和数字的格式化是一项常见的任务,这涉及到前端展示和后端数据处理的一致性。Struts2提供了一系列工具和API,使得开发者能够轻松地进行格式化工作。以下是对Struts2中日期、时间和...

    Struts2解决表单重复提交

    Struts2作为一个流行的Java Web框架,为解决表单重复提交提供了多种方法。 首先,关于表单重复提交的原因,有以下几点: 1. 服务器或网络延迟导致用户多次点击提交按钮。 2. 用户在表单提交后刷新浏览器页面。 ...

    Struts2防止重复提交解决方案

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

    struts2的日期回显

    在Struts2中,日期回显是指在表单提交后,若验证失败或者用户需要重新填写信息时,框架能够将之前用户输入的日期值重新显示在表单上,提升用户体验。这篇博客文章可能详细介绍了如何在Struts2中实现这一功能。 首先...

    STRUTS2的英文教程

    这个"Starting Struts2"的英文教程是开发者们了解和学习Struts2的一个宝贵资源。尽管教程是英文的,但通过使用汉化软件可以方便非英语使用者理解其内容。 Struts2框架的核心特性包括: 1. **Action类**:Struts2中...

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

    Struts2框架提供了一种解决方案,即使用Token机制来防止表单的重复提交。以下是对这个主题的详细说明: 1. **表单重复提交问题**:当用户在提交表单时,由于网络延迟或用户误操作,可能会导致同一个表单被多次提交...

    Starting_Struts2中英文电子版

    在"Starting_Struts2中英文电子版"中,我们可以期待深入学习Struts2的核心概念和实际应用。这本书分为中文和英文两个版本,适合不同语言背景的学习者。对于毕业设计而言,这个资源非常有价值,因为它不仅涵盖了基础...

    李顺利Struts2表单验证后回显错误信息 标签使用

    总结来说,通过学习李顺利老师的Struts2表单验证后回显错误信息的教程,我们可以有效地利用Struts2提供的标签和OGNL表达式来创建用户友好的错误提示,提升Web应用的用户体验。同时,通过自定义样式和利用拦截器,...

    struts2错误显示

    ### Struts2错误显示知识点详解 #### 一、Struts2简介及验证机制 Struts2是一个基于MVC模式的开源Web应用框架,用于构建企业级的Java Web应用程序。相较于Struts1.x版本,Struts2提供了更为强大的功能,尤其是在...

    struts2 in action 实战(中文版+英文版)

    《Struts2 in Action》是一本深入探讨Struts2框架的实战指南,旨在帮助Java开发者理解和掌握这个流行的MVC框架的精髓。这本书分为中文版和英文...无论是中文版还是英文版,都能帮助读者提升在Struts2框架下的编程技能。

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

    若不匹配或令牌已被使用,Struts2会抛出`TokenException`异常,此时可以捕获这个异常并显示错误信息,阻止重复操作。 5. **清理令牌**:处理完表单请求后,需要调用`clearToken()`方法来清除session中的令牌,以...

    struts2批量提交数据

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

    struts in action 英文版

    这本书英文版深入浅出地讲解了如何使用Struts构建高效、可维护的Web应用程序。Struts是基于Model-View-Controller(MVC)设计模式的Java框架,它在J2EE(Java 2 Platform, Enterprise Edition)环境中扮演着重要的...

    Struts2漏洞检查工具Struts2.2019.V2.3

    2. 框架配置错误:如果开发者在配置Struts2时未遵循最佳实践,可能会导致敏感信息泄露、权限提升等安全问题。例如,不正确的Action配置可能导致未授权访问。 3. 类加载器问题:Struts2使用了自定义的类加载机制,这...

    Struts 2 全版本漏洞检测工具 18.09 过waf版

    5、作者对不同的struts2漏洞测试语句做了大量修改,执行命令、上传功能已经能通用。 6、支持HTTPS。 7、支持GET、POST、UPLOAD三种请求方法,您可以自由选择。(UPLOAD为Multi-Part方式提交) 8、部分漏洞测试支持...

Global site tag (gtag.js) - Google Analytics