Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用JSTL forEach时,数组将打印String.toString()而不是实际的字符串值_Java_Jsp_Jstl - Fatal编程技术网

Java 使用JSTL forEach时,数组将打印String.toString()而不是实际的字符串值

Java 使用JSTL forEach时,数组将打印String.toString()而不是实际的字符串值,java,jsp,jstl,Java,Jsp,Jstl,我有以下代码: String[] columnHeaders = {"Banana", "Apple", "Carrot", "Orange", "Lychee", "Permisson"}; <c:forEach var="header" items="<%= columnHeaders%>"> <td> <c:out value="${header}" /> </td> </c:forEach

我有以下代码:

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

<c:forEach var="header" items="<%= columnHeaders%>">
    <td>
        <c:out value="${header}" />
    </td>
</c:forEach>
在我看来,打印的是内存值,而不是每个字符串中包含的值。
我在这里遗漏了什么?

您错误地引用了
值。Taglibs/EL和Scriptlet不共享相同的变量范围。基本上是在
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变量(请参阅),在上面的示例中,您需要将其重命名为其他变量,例如
${columnHeader}

另见:


与具体问题无关,表头需要用HTML表示为
,而不是

这个线程非常古老,但认为它仍然有用

如果您没有义务使用
字符串[]
,则可以使用
集合
列表

如果这样做,就不必在请求范围中放入变量

例如,类似于以下内容的操作应该有效:

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>
List columnheader=Arrays.asList(“香蕉”、“苹果”、“胡萝卜”、“橘子”、“荔枝”、“Permisson”);

不要使用
标题
作为变量name@Qwerky看起来快速的答案是不使用
标题
作为var名称,一旦我更改了它,并且仍然保留了我的旧代码,它就可以工作了。谢谢谢谢你的及时回复。我尝试了你所说的,但仍然得到
org.apache.commons.el.ImplicitObjects的
columnHeaders.toString()
值$7@75b875b8
至于在
上使用
,我知道,但这是我继承的旧代码,我不愿意升级,因为到处都会有很多更新。;)您的眼光很敏锐。请查看更新的答案,您需要重命名
var=“header”
。感谢您的回答,但我注意到它仍然没有按照您的建议工作,并且@Qwerky提供的评论起了作用。有没有办法让他相信这一点?这是一个错误,你的另一个错误是你试图用scriptlet而不是EL引用变量。
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>