2011-05-08 110 views
0

我有一个字段使用日期/时间选择器生成隐藏字段的表格,其日期为&时间为英国格式dd/MM/yy HH:mm通过使用的JavaScript。这被提交给一个struts2的操作,这个操作使用java.util.Date来获取字段的getters &。Struts2日期解析

在JSP:

<s:form> 

    ... 
    <input type="hidden" name="myDate" value="08/05/11 16:00" /> 
    <s:submit /> 

</s:form> 

在操作

public class MyAction 
{ 

    public void setMyDate(Date d) 
    { 
     this.d = d; 
    } 

    public Date getMyDate() 
    { 
     return d; 
    } 

} 

正如预期的那样在Firefox中,当我提交表单自动支柱解析日期和我结束了在动作Date对象用正确的日期。

然而,在谷歌浏览器,当我提交表单的日期被解析,就好像它是在美国的格式MM/DD/YY HH:MM,结果我得到的8月5日5月8日,而不是。

检查两个浏览器发送的HTTP头信息,尽管我的操作系统语言设置为en_GB谷歌浏览器仍然发送'接受语言'标头作为en_US,这意味着struts必须使用此来确定使用什么日期格式。

我只能假设这是谷歌浏览器中的一个错误,但鉴于我没有自由修复谷歌浏览器在Struts 2中有一种方法,我可以指定一个固定的日期格式,它告诉Struts格式它应该用来解析表单参数中的日期?

+0

您是否尝试过使用设置为所需的郎'request_locale'参数?该参数设置会话变量'WW_TRANS_I18N_LOCALE',并且对于我的应用程序,它将覆盖'Accept-Language'设置语言。希望它可以帮助... http://struts.apache.org/2.1.2/struts2-core/apidocs/com/opensymphony/xwork2/interceptor/I18nInterceptor.html – 2011-09-13 15:34:08

回答

0

为了避免错误解释由不同的Locale值引起的日期,我将使用明确且明确的表示日期和时间的方法。这是标准涵盖的内容。

不幸的是,我不认为Struts2的转换可以考虑到本表示“开箱即用” Date。对于日期转换,默认情况下,Struts2 uses the SHORT format for the Locale associated with the current request

我想你可以尝试发现,已转换ISO 8601点的日期或简单的方法也只是以write your own插件。

+0

我已经与创建ISO标准的自定义类型转换器,它有点令人失望的struts不允许你指定一个明确的格式,但TypeConverter解决了我的问题。 – 3urdoch 2011-05-08 21:14:43

0

我建议使用Joda Time API.它完全支持ISO 8601 standard和有语言环境,时区,转换等,我用它来进行所有的日期 - 时间操作在所有我的应用程序的广泛API(包括Struts 2的)。