【问题标题】:When using JSTL forEach the array prints the String.toString() and not actual string value使用 JSTL forEach 时,数组打印 String.toString() 而不是实际的字符串值
【发布时间】:2011-12-19 16:11:54
【问题描述】:

我有以下代码:

String[] columnHeaders = {"Banana", "Apple", "Carrot", "Orange", "Lychee", "Permisson"};

<c:forEach var="header" items="<%= columnHeaders%>">
    <td>
        <c:out value="${header}" />
    </td>
</c:forEach>

执行 JSP 时,会打印以下值:

org.apache.commons.el.ImplicitObjects$7@6ac86ac8 
org.apache.commons.el.ImplicitObjects$7@6ac86ac8 
...

在我看来,正在打印内存值而不是每个字符串中包含的值。 我在这里错过了什么?

【问题讨论】:

  • 不要使用header 作为变量名
  • @Qwerky 看来,快速而快速的答案是不使用 header 作为 var 名称,一旦我更改它并仍然保留我的旧代码,它就可以工作。谢谢!

标签: java jsp jstl


【解决方案1】:

您错误地引用了 items 值。 Taglibs/EL 和 scriptlets 不共享相同的变量范围。您基本上是在 items 属性中打印 columnHeaders.toString() 并告诉 c:forEach 对其进行迭代。相反,您需要将其放在请求范围内(最好通过 servlet)并以正常方式使用 EL ${}

<%
    String[] columnHeaders = {"Banana", "Apple", "Carrot", "Orange", "Lychee", "Permisson"};
    request.setAttribute("columnHeaders", columnHeaders);
%>

<c:forEach var="columnHeader" items="${columnHeaders}">
    <td>
        <c:out value="${columnHeader}" />
    </td>
</c:forEach>

另外,${header} 是一个保留的 EL 变量,引用请求标头映射(请参阅 implicit objects in EL),您需要将其重命名为其他名称,例如上例中的 ${columnHeader}

另见:


与具体问题无关,表头在 HTML 中需要用&lt;th&gt; 表示,而不是&lt;td&gt;

【讨论】:

  • 感谢您的及时回复。我试过你说的,我仍然得到columnHeaders.toString()org.apache.commons.el.ImplicitObjects$7@75b875b8 的值
  • 至于使用&lt;th&gt; 而不是&lt;td&gt;,我知道,但这是我继承的旧代码,我懒得升级它,因为它会很多 的更新无处不在。 ;) 你有敏锐的眼光。
  • 请查看更新后的答案,您需要重命名var="header"
  • 感谢您的回答,但我注意到它仍然无法按照您的建议工作,而起作用的是@Qwerky 提供的评论。有没有办法让他相信这一点?
  • 这是一个错误,你的另一个错误是你试图通过 scriptlet 而不是 EL 来引用变量。
【解决方案2】:

这个帖子很老了,但仍然认为它很有用。

如果您没有义务使用 String[] ,您可以使用 Collection&lt;String&gt;List&lt;String&gt;

如果这样做,您就不必在请求范围内放置变量。

例如,如下所示应该可以工作:

List<String> columnHeaders = Arrays.asList("Banana", "Apple", "Carrot", "Orange", "Lychee", "Permisson");

<c:forEach var="columnHeader" items="${columnHeaders}">
    <td>
        <c:out value="${columnHeader}" />
    </td>
</c:forEach>

【讨论】:

    猜你喜欢
    • 2014-04-27
    • 2016-05-07
    • 1970-01-01
    • 2020-09-03
    • 1970-01-01
    • 2021-05-09
    • 1970-01-01
    • 2014-07-11
    • 1970-01-01
    相关资源
    最近更新 更多