在s:select中使用#this时出现奇怪的OGNL行为

时间:2012-05-06 22:54:12

标签: java struts2 ognl

考虑以下,其中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" />

我在回答这个问题How would I format a list of dates within a struts 2 select tag?时创建了上述内容(我还建议其他解决方案可能是更好的方法)。无论使用如此长的OGNL表达是否是个好主意,我都看不出需要:new java.util.Date(#this[0].time)尽管创建了这个片段,但我惊讶地发现它在看似等效的{{1}没有(没有产生输出)。

如果我们在#this[0]中替换,我们会看到我们期望的内容:listValue="#this[0].class"

创建新日期的行为符合预期,调用Date的弃用属性(如class java.util.Date)会产生预期的输出。

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

使用Struts 2.3.1.2

1 个答案:

答案 0 :(得分:3)

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