为什么struts属性标签以m / d / yy格式转换java.util.Date

时间:2014-02-06 15:28:40

标签: jsp struts2

我的动作类中有一个Date对象,当我使用<s:property>标签在jsp中访问该对象时,我在m/d/yy格式中获取日期而没有我的干预,为什么会这样?

<s:property value="#xyz"/> where xyz is of type java.util.date show date in m/d/yy format

2 个答案:

答案 0 :(得分:3)

Struts会识别文档的Built in Type Conversion Support部分中列出的某些对象类型,并按照linked answer by Andrea中的说明进行识别。

如果您想知道为什么您的Date对象呈现为m/d/yy格式,即使您使用<s:property>标记而不是<s:date>标记,也是因为Date是其中一种类型Struts2内置了转换功能。

因此,Struts2不使用Date对象的默认toString()方法,而是使用内置类型转换器来显示String。

com.opensymphony.xwork2.conversion.impl.StringConverter类中,Struts2将尝试使用Andrea和文档中提到的Locale的默认格式,以有意义的方式将Date对象转换为String。

答案 1 :(得分:2)

它没有改变任何东西:日期是一个时间点。用于创建它的格式(也不是用于显示它的格式)与其值无关。

由于您没有指定任何格式,因此框架将回退到浏览器在HTTP标头中发送的Locale(可能是DateFormat.SHORT)的默认值(en_US)(如果不是由你手动设置。)

您可以阅读here some considerations有关Struts2如何处理日期的信息。

请注意,DateFormat.MEDIUM格式代替the default when using Struts2 <s:date>标记而未指定格式。

也就是说,您可以在应用程序级别设置默认日期格式,或在<s:date />标记中设置内联。