2013-03-27 3 views
6

Ich übergebe ein Attribut namens dataTable in meine JSP, die eine Liste von Listen von Zeichenfolgen ist. In der JSP, wenn ich Ausgang des Attribut, mit $ {datatable} druckt es im RAW-Format aus:c: forEach Schleife drucken eckigen Klammern Begrenzer

[[Header1, Header2, Header3], [A, B, C], [1, 2, 3]] 

ich direkt einen Artikel drucken kann wie folgt aus:

${dataTable[1][2]} 

die Ausgänge: C

Wenn ich eine verschachtelte c: forEach-Schleife geschrieben habe, um die Tabelle zu drucken, sind die eckigen Klammern am Ende jeder Zeile enthalten, aber nicht die eckigen Klammern auf dem gesamten Objekt.

für die My-Code ist:

<c:forEach var="row" items="${dataTable}"> 
    <c:forEach var="item" items="${row} "> 
     <span>${item}</span> 
    </c:forEach> 
    <br /> 
</c:forEach> 

was zur Folge hat:

 <span>[Header1</span> 
     <span> Header2</span> 
     <span> Header3] </span> 
    <br /> 
     <span>[A</span> 
     <span> B</span> 
     <span> C] </span> 
    <br /> 
     <span>[1</span> 
     <span> 2</span> 
     <span> 3] </span> 
    <br /> 

dass fast, was ich für, werde ich will nur nicht die eckigen Klammern am Anfang und Ende jeder Reihe.

Was fehlt mir, was dazu führt, dass diese eckigen Klammern beim Durchlaufen angezeigt werden, aber nicht, wenn ich direkt auf ein Element zugreife?

Danke!

+0

Ist dies der genaue Code von Ihrer Seite? – clav

+0

Ja, ich benutze nur eine einfache generische Tabelle, bis ich es richtig funktioniere. –

Antwort

3

Es gibt einen zusätzlichen Raum nach ${row}, die die Liste verursacht zu bekommen „toStringed“ auf dieser Linie <c:forEach var="item" items="${row} ">, ändern Sie ihn auf <c:forEach var="item" items="${row}"> und Sie werden gut zu gehen.

+0

In der Tat, beachten Sie auch, dass der zusätzliche Speicherplatz nach dem ']' in der Ausgabe endete. – BalusC

+0

Wow, schöner Fang. – Alex

+0

Wow. Vielen Dank! –

0

Sie haben gesagt, dass dataTable eine Liste von Zeichenfolgen ist - das bedeutet, dass das innere forEach-Tag über eine Zeichenfolge iteriert. In der Apache-JSTL-Implementierung (1.2 Quellcode here) wird beim Iterieren über eine Zeichenfolge in kommaseparierte Token geparst. Die Zeichenfolge "[A, B, C]" wird in die Liste ["[A", " B", " C]"' geparst.

Um Ihr gewünschtes Verhalten zu erhalten, versuchen Sie dataTable mit geschachtelten Listen, z. [["A", "B", "C"], ["1", "2", "3"]] anstelle von ["[A, B, C]", "[1, 2, 3]"].

+0

dataTable ist eine Liste von Listen von Strings, bevor sie in das Attribut gesetzt wurde, wurde sie als ArrayList > –

+0

initialisiert Dann können Sie den Code, der DataTable initialisiert? – Alex