java-在s:select中使用#this时奇怪的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)尽管出于沮丧而创建了该片段,但令我惊讶的是它在看似等效的#this [0]没有(未产生任何输出)的地方工作.

如果我们替换为listValue =“#this [0] .class”,我们将看到期望的结果:类java.util.Date

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

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

使用Struts 2.3.1.2

解决方法:

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

上一篇:java-建议从struts1→(struts2,春季)的进度路径


下一篇:java-Struts 2和简单的Facebook API