【转载】:英文环境下 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来删去前后空格。
分享到:
相关推荐
8. **异常处理**:Struts2提供了一套完善的异常处理机制,可以捕获和管理应用程序中的异常,通过配置错误页面或Action,确保在出现错误时提供适当的反馈。 9. **测试支持**:Struts2提供了JUnit集成,使得单元测试...
通过这样的配置,当应用程序中发生未捕获的异常时,Struts2会自动跳转到/error.jsp页面,显示错误信息。 #### 总结 Struts2作为一款先进的MVC框架,不仅简化了Web应用程序的开发流程,还提高了代码的可维护性和可...
《Struts2 in Action》是一本深入介绍该框架的专业书籍,无论是中文版还是英文版,都为读者提供了全面理解和实践Struts2的知识。 中文版的《Struts2 in Action》为中文阅读者提供了方便,使得理解复杂的框架概念变...
在Struts2框架中,处理日期、时间和数字的格式化是一项常见的任务,这涉及到前端展示和后端数据处理的一致性。Struts2提供了一系列工具和API,使得开发者能够轻松地进行格式化工作。以下是对Struts2中日期、时间和...
Struts2作为一个流行的Java Web框架,为解决表单重复提交提供了多种方法。 首先,关于表单重复提交的原因,有以下几点: 1. 服务器或网络延迟导致用户多次点击提交按钮。 2. 用户在表单提交后刷新浏览器页面。 ...
在Struts2中,防止重复提交是一个重要的问题,因为它可能导致数据不一致性和服务器资源的浪费。本文将详细介绍如何在Struts2中解决这个问题,以及相关的技术概念。 首先,我们要理解Struts2中的拦截器(Interceptor...
在Struts2中,日期回显是指在表单提交后,若验证失败或者用户需要重新填写信息时,框架能够将之前用户输入的日期值重新显示在表单上,提升用户体验。这篇博客文章可能详细介绍了如何在Struts2中实现这一功能。 首先...
这个"Starting Struts2"的英文教程是开发者们了解和学习Struts2的一个宝贵资源。尽管教程是英文的,但通过使用汉化软件可以方便非英语使用者理解其内容。 Struts2框架的核心特性包括: 1. **Action类**:Struts2中...
Struts2框架提供了一种解决方案,即使用Token机制来防止表单的重复提交。以下是对这个主题的详细说明: 1. **表单重复提交问题**:当用户在提交表单时,由于网络延迟或用户误操作,可能会导致同一个表单被多次提交...
在"Starting_Struts2中英文电子版"中,我们可以期待深入学习Struts2的核心概念和实际应用。这本书分为中文和英文两个版本,适合不同语言背景的学习者。对于毕业设计而言,这个资源非常有价值,因为它不仅涵盖了基础...
总结来说,通过学习李顺利老师的Struts2表单验证后回显错误信息的教程,我们可以有效地利用Struts2提供的标签和OGNL表达式来创建用户友好的错误提示,提升Web应用的用户体验。同时,通过自定义样式和利用拦截器,...
### Struts2错误显示知识点详解 #### 一、Struts2简介及验证机制 Struts2是一个基于MVC模式的开源Web应用框架,用于构建企业级的Java Web应用程序。相较于Struts1.x版本,Struts2提供了更为强大的功能,尤其是在...
《Struts2 in Action》是一本深入探讨Struts2框架的实战指南,旨在帮助Java开发者理解和掌握这个流行的MVC框架的精髓。这本书分为中文版和英文...无论是中文版还是英文版,都能帮助读者提升在Struts2框架下的编程技能。
若不匹配或令牌已被使用,Struts2会抛出`TokenException`异常,此时可以捕获这个异常并显示错误信息,阻止重复操作。 5. **清理令牌**:处理完表单请求后,需要调用`clearToken()`方法来清除session中的令牌,以...
在处理批量数据提交时,Struts2提供了一种高效的方法来管理并存储大量数据到数据库。本篇文章将深入探讨如何利用Struts2实现批量提交数据的功能。 ### 一、批量提交的概念 批量提交是指一次性处理多个数据记录,而...
这本书英文版深入浅出地讲解了如何使用Struts构建高效、可维护的Web应用程序。Struts是基于Model-View-Controller(MVC)设计模式的Java框架,它在J2EE(Java 2 Platform, Enterprise Edition)环境中扮演着重要的...
2. 框架配置错误:如果开发者在配置Struts2时未遵循最佳实践,可能会导致敏感信息泄露、权限提升等安全问题。例如,不正确的Action配置可能导致未授权访问。 3. 类加载器问题:Struts2使用了自定义的类加载机制,这...
5、作者对不同的struts2漏洞测试语句做了大量修改,执行命令、上传功能已经能通用。 6、支持HTTPS。 7、支持GET、POST、UPLOAD三种请求方法,您可以自由选择。(UPLOAD为Multi-Part方式提交) 8、部分漏洞测试支持...