考虑以下,其中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
答案 0 :(得分:3)
因为#this[0]
会自动转换为String。如果将日志级别设置为调试,则可以看到通常被禁止的异常消息。