我的动作类中有一个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
答案 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 />
标记中设置内联。