Bei der Verwendung von JSTL forEach das array druckt den String.toString() und nicht von der tatsächlichen string-Wert
Ich habe den folgenden code:
String[] columnHeaders = {"Banana", "Apple", "Carrot", "Orange", "Lychee", "Permisson"};
<c:forEach var="header" items="<%= columnHeaders%>">
<td>
<c:out value="${header}" />
</td>
</c:forEach>
Wenn die JSP ausgeführt wird, werden folgende Werte ausgedruckt:
org.apache.commons.el.ImplicitObjects$7@6ac86ac8
org.apache.commons.el.ImplicitObjects$7@6ac86ac8
...
Erscheint es mir, dass die Speicher-Wert gedruckt wird und nicht der Wert, die in jedem string.
Was vermisse ich hier?
- Verwenden Sie nicht
header
als var name - Es scheint, dass die kurze und schnelle Antwort war nicht zu verwenden
header
als die var-Namen, sobald ich das geändert, und trotzdem hielt mein Alter code funktionierte es. Danke!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sie verweisen, die
items
Wert falsch. Taglibs/EL und scriptlets nicht denselben Geltungsbereich von Variablen. Sie sind im Grunde zu druckencolumnHeaders.toString()
imitems
Attribut und sagenc:forEach
Durchlaufen Sie es. Stattdessen, Sie brauchen, um es in den request-scope (vorzugsweise von einem servlet) und verwenden Sie EL${}
den normalen Weg:Auch
${header}
ist ein vorbehalten EL-variable bezieht sich auf die request-header-map (siehe implizite Objekte in EL), würden Sie brauchen, um es auf etwas anderes umbenennen wie${columnHeader}
im obigen Beispiel.Siehe auch:
Unabhängigen zu dem konkreten problem, überschriften von der Tabelle dargestellt werden müssen, in HTML durch
<th>
, nicht<td>
.columnHeaders.toString()
Wert vonorg.apache.commons.el.ImplicitObjects$7@75b875b8
<th>
über<td>
, ich weiß, aber es ist Alter code, den ich geerbt habe und ich bin lax, um es zu aktualisieren, denn es werden viel von updates überall. 😉 Sie haben ein gutes Auge.var="header"
.<%= varName %>
<%= foo %>
im Grunde genommenout.println()
auf diefoo
Objekt.Dieser thread ist ziemlich alt, aber dachte, es wäre nützlich dennoch.
Wenn Sie sind nicht verpflichtet, Sie zu nutzen
String[]
könnten SieCollection<String>
oderList<String>
.Wenn Sie das tun, werden Sie nicht haben, um eine variable im request-scope.
Beispielsweise so etwas wie das folgende sollten funktionieren: