如何做一个小脚本数组传递到JSTL标记?(How does a scriptlet pass an

2019-10-21 12:27发布

我想<%= %>假设在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

是否有人可以解释这种现象?

谢谢!

参考

  1. 在JSTL测试属性的<c:if>标签

Answer 1:

一些阅读后回答我的问题。

总之,我错了JSP标记属性的评估方式。 如果一个scriptlet用于设置一个属性1的值,它的返回值,而不是被转换成字符串,被直接用于设置属性的值。 (如果类型不匹配,EL进行强制类型转换,试图使其工作。如果失败,将引发异常。)

在这个例子中

<c:forEach var="item" items="<%= new Object[] { 1, 2, 3 } %>">

标签的类型items属性是Object ,所以属性被设置到的scriptlet-阵列的结果new Object[] { 1, 2, 3 }

  1. 请注意,您不能在组合使用小脚本使用文字字符串设置属性。 也就是说,你可能会认为<c:forEach items="abc<%= "def" %>" var="c">将执行小脚本和评价串abcdef 。 而是,它将设置的属性值items只是字符串abc<%= "def" %>


文章来源: How does a scriptlet pass an array to a JSTL tag?