【问题标题】:How does a scriptlet pass an array to a JSTL tag?scriptlet 如何将数组传递给 JSTL 标记?
【发布时间】:2015-02-25 08:40:34
【问题描述】:

我认为<%= %> 在 JSTL1 的上下文中使用时应该计算为字符串。但在下面的代码中似乎并非如此:

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

令我惊讶的是,&lt;c:forEach&gt; 标签实际上遍历了 scriptlet 中的数组:

Item: 1
Item: 2
Item: 3

有人可以解释一下这种行为吗?

谢谢!

参考文献

  1. test attribute in JSTL <c:if> tag

【问题讨论】:

    标签: jsp jstl scriptlet


    【解决方案1】:

    阅读后回答我自己的问题。

    简而言之,我对 JSP 标记属性的评估方式是错误的。如果使用scriptlet 设置属性的值1,则直接使用其返回值而不是转换为字符串来设置属性的值。 (如果类型不匹配,EL 会执行类型强制以尝试使其工作。如果失败,则会引发异常。)

    在示例中

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

    标签的items属性的类型是Object,所以属性设置为scriptlet的结果——数组new Object[] { 1, 2, 3 }

    1. 请注意,您不能将 scriptlet 与文字字符串结合使用来设置属性。也就是说,您可能认为&lt;c:forEach items="abc&lt;%= "def" %&gt;" var="c"&gt; 将执行脚本并计算为字符串abcdef。但是,它会将items 的属性值设置为字符串abc&lt;%= "def" %&gt;

    【讨论】:

      猜你喜欢
      • 2011-04-03
      • 2011-09-12
      • 2011-08-07
      • 2016-09-19
      • 2017-09-29
      • 2015-04-12
      • 1970-01-01
      相关资源
      最近更新 更多