我想<%= %>
假设在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
是否有人可以解释这种现象?
谢谢!
参考
- 在JSTL测试属性的<c:if>标签
一些阅读后回答我的问题。
总之,我错了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">
将执行小脚本和评价串abcdef
。 而是,它将设置的属性值items
只是字符串abc<%= "def" %>
。