Struts2<;s:url>;/&书信电报;s:param>;输出类型转换失败的日期参数值的标记

Struts2<;s:url>;/&书信电报;s:param>;输出类型转换失败的日期参数值的标记,struts2,tags,Struts2,Tags,我正在努力解决Struts2日期格式问题。如果我理解正确,Struts2中的类型转换是区域设置感知的,映射到日期对象的任何表单字段/参数都应该是特定于区域设置的短格式字符串;值堆栈上日期对象的默认输出也作为特定于区域设置的短格式输出(除非使用自定义格式覆盖) 尽管表单字段可以很好地处理日期,但在使用标记时,我似乎无法使标记正确编码日期参数。当我尝试这样的事情时 <s:url action="foo" > <s:param name="endDateParam" value=

我正在努力解决Struts2日期格式问题。如果我理解正确,Struts2中的类型转换是区域设置感知的,映射到日期对象的任何表单字段/参数都应该是特定于区域设置的短格式字符串;值堆栈上日期对象的默认输出也作为特定于区域设置的短格式输出(除非使用自定义格式覆盖)

尽管表单字段可以很好地处理日期,但在使用
标记时,我似乎无法使
标记正确编码日期参数。当我尝试这样的事情时

<s:url action="foo" >
  <s:param name="endDateParam" value="#endDate"/>
</s:url>
我重新阅读了Struts2文档,但他们主要讨论在i18n’ized属性文件中创建自定义日期格式,这似乎不是正确的解决方案


对此问题的任何帮助都将不胜感激。

您可能已经通过按需要的方式在操作中格式化字符串来解决此问题。我首先建议您这样做,除非您非常坚持模型/视图分离,或者在操作和视图之间没有一对一的映射,在这种情况下,我的热情是合理的

假设您觉得格式化不是操作的业务,在这种情况下,您可以使用OGNL实现其全部效果:

下面是一个显示当前日期的示例(它使用new来构造一个新日期,但是您可以很容易地将“new java.util.date()”替换为“endDate”)。它是这样构造的,因此任何人都可以将它粘贴到他们的JSP中,而不需要任何操作依赖项

<p>
   <s:property value="@java.text.DateFormat@getDateInstance(@java.text.DateFormat@SHORT, @java.util.Locale@CANADA).format(new java.util.Date())"/>
</p>

注意:要求OGNL静态方法访问为true。最简单的方法是将以下内容添加到struts.xml中:

<constant name="struts.ognl.allowStaticMethodAccess" value="true"/>

将OGNL用于这一级别有点可疑,但它很容易阅读,并且其意图显然与视图/表示相关。尽管构建起来并不那么容易……最简单的方法是将所有内容都编写为一行java,然后应用OGNL语法规则,您可以在这里找到:

也可供快速参考:


您可以这样发送:

<s:param name="dateFrom">
<s:date name="dateFrom" format="dd.MM.yyyy"/>
</s:param>

<s:param name="dateFrom">
<s:date name="dateFrom" format="dd.MM.yyyy"/>
</s:param>