2013-03-27 14 views
6

Przepuszczam atrybut o nazwie dataTable do mojego JSP, który jest listą list łańcuchów. W JSP Gdybym wyjście atrybutu, przy użyciu $ {DataTable} drukuje je w formacie RAW:c: forEach w pętli, separatory kwadratowych nawiasów kwadratowych

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

mogę wydrukować element bezpośrednio tak:

${dataTable[1][2]} 

który Wyjścia: C

Następnie, gdy napisałem zagnieżdżoną pętlę c: forEach, aby wydrukować tabelę, uwzględniono kwadratowe nawiasy na końcu każdego wiersza, ale nie nawiasy kwadratowe na całym obiekcie.

Mój kod to:

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

co skutkuje:

 <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 /> 

To prawie co jadę na, ja po prostu nie chcą kwadratowych nawiasach na początku i na końcu każdego rzędu.

Czego mi brakuje, powodując wyświetlanie nawiasów kwadratowych podczas iteracji, ale nie w przypadku bezpośredniego dostępu do elementu?

Dzięki!

+0

Czy to jest dokładny kod ze strony? – clav

+0

Tak, używam zwykłego prostego stołu, dopóki nie sprawi, że działa poprawnie. –

Odpowiedz

3

Istnieje dodatkowe miejsce po ${row}, które powoduje, że lista otrzymuje "toStringed" w tej linii <c:forEach var="item" items="${row} ">, zmień ją na <c:forEach var="item" items="${row}">, a będziesz gotowy.

+0

Rzeczywiście, zauważ, że dodatkowa przestrzeń skończyła się po ']' na wyjściu. – BalusC

+0

Wow, niezły haczyk. – Alex

+0

Wow. Dziękuję Ci! –

0

Powiedziałeś, że dataTable jest listą ciągów znaków - oznacza to, że wewnętrzny znacznik forEach jest iterowany przez ciąg znaków. W implementacji Apache JSTL (1.2 kod źródłowy here), iterowanie przez ciąg przetwarza go na tokeny oddzielone przecinkami. Więc ciąg "[A, B, C]" zostanie przeanalizowany na liście ["[A", " B", " C]"'. Aby uzyskać żądane zachowanie, spróbuj zdefiniować używając list zagnieżdżonych, np. [["A", "B", "C"], ["1", "2", "3"]] zamiast ["[A, B, C]", "[1, 2, 3]"].

+0

dataTable jest listą list łańcuchów, zanim została umieszczona w atrybucie, która została zainicjowana jako ArrayList > –

+0

Następnie możesz wysłać kod, który inicjuje dataTable? – Alex

Powiązane problemy