我认为<%= %>
在JSTL 1 的上下文中使用时应该计算为字符串。但在下面的代码中似乎并非如此:
<c:forEach var="item" items="<%= new Object[] { 1, 2, 3 } %>">
Item: ${item}
</c:forEach>
令我惊讶的是,<c:forEach>
标记实际上遍历了scriptlet中的数组:
Item: 1
Item: 2
Item: 3
有人可以解释一下这种行为吗?
谢谢!
答案 0 :(得分:0)
在阅读之后回答我自己的问题。
简而言之,我对JSP标记属性的评估方式错了。如果使用scriptlet设置属性 1 的值,则直接使用其返回值而不是转换为字符串来设置属性的值。 (如果类型不匹配,EL会执行类型强制以尝试使其工作。如果失败,则会引发异常。)
在示例中
<c:forEach var="item" items="<%= new Object[] { 1, 2, 3 } %>">
标记的items
属性类型为Object
,因此该属性设置为scriptlet的结果 - 数组new Object[] { 1, 2, 3 }
。
<c:forEach items="abc<%= "def" %>" var="c">
将执行scriptlet并评估为字符串abcdef
。但相反,它会将items
的属性值设置为字符串abc<%= "def" %>
。