Struts2 <s:url> / <s:param>标签输出类型转换失败的日期参数值</s:param> </s:url>

时间:2012-03-23 21:54:19

标签: struts2 tags

我正在努力解决Struts2日期格式问题。如果我理解正确,Struts2中的类型转换是可识别语言环境的,并且映射到Date对象的任何表单字段/参数应该是以其Locale特定SHORT格式格式化的字符串;值栈上Date对象的默认输出也以Locale特定的SHORT格式输出(除非使用自定义格式覆盖)。

尽管表单字段在日期中运行良好,但在使用<s:url>代码时,我似乎无法使用<s:param>标记正确编码日期参数。当我尝试这样的事情时

<s:url action="foo" >
  <s:param name="endDateParam" value="#endDate"/>
</s:url>

结果显然不是SHORT格式:

/foo.action?endDateParam=Sat+Jan+14+00%3A00%3A00+EST+2012

我重新阅读了Struts2文档,但他们主要讨论在i18n属性文件中创建自定义日期格式,这似乎不是正确的解决方案。

非常感谢任何有关此问题的帮助。

2 个答案:

答案 0 :(得分:3)

你可以这样发送:

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

答案 1 :(得分:0)

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

让我们说你觉得格式化不是行动的事情,在这种情况下,你可以使用OGNL来实现它的全部效果:

这是一个显示当前日期的示例(它使用 new 来构建新日期,但您可以非常轻松地替换&#34; new java.util.Date()&#34 ;&#34; endDate&#34;。它是以这种方式构造的,所以任何人都可以将它粘贴到他们的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语法规则,您可以在此处找到:

http://commons.apache.org/ognl/language-guide.html

也可以快速参考:

http://docs.oracle.com/javase/7/docs/api/java/text/DateFormat.html

http://docs.oracle.com/javase/7/docs/api/java/util/Locale.html