3

考虑以下情况,其中 availableExclusions 是 Date 对象的数组。

<s:select listValue="(new java.text.SimpleDateFormat('MM/dd/yyyy')).format(new java.util.Date(#this[0].time))" size="25" id="inputExclusionDates" name="available" list="availableExclusions" multiple="true" cssClass="multi-select" />

我创建了上述内容以回答这个问题如何在 struts 2 选择标签中格式化日期列表?(我还建议其他解决方案可能是更好的方法)。不管使用这么长的 OGNL 表达式是否是一个好主意,我都看不出有必要:new java.util.Date(#this[0].time)尽管出于沮丧创建了该片段,但令我惊讶的是,它发现它在看似等效的地方#this[0]不起作用(没有产生输出)。

如果我们替换,listValue="#this[0].class"我们会看到我们所期望的:class java.util.Date

创建一个新的 Date 的行为符合预期,并调用 Date 的不推荐使用的属性,例如listValue="#this[0].day"产生预期的输出。

为什么我必须使用冗余表达式 new java.util.Date(#this[0].time) 而不是 #this[0] 在这个 select 语句中?

使用 Struts 2.3.1.2

4

1 回答 1

3

因为#this[0]会自动转换为String。如果您将日志级别转为调试,您可以看到通常被抑制的异常消息。

于 2012-09-26T13:23:06.857 回答