2013-03-27 8 views
6

Sto passando un attributo denominato dataTable nel mio JSP che è un elenco di liste di stringhe. Nella JSP se l'uscita l'attributo, utilizzando $ {DataTable} esso stampa fuori in formato RAW:c: per ogni delimitatore di parentesi quadra di stampa a ciclo continuo

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

posso stampare un elemento direttamente in questo modo:

${dataTable[1][2]} 

quali uscite: C

Quindi, quando ho scritto un ciclo c: forEach per stampare la tabella, sono incluse le parentesi quadre alla fine di ogni riga, ma non le parentesi quadre sull'intero oggetto.

Il mio codice di ciò è:

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

che si traduce in:

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

che è quasi quello che sto per, io non voglio che le parentesi quadre all'inizio e alla fine di ogni riga.

Cosa mi manca che causa la visualizzazione di tali parentesi quadre durante l'iterazione, ma non quando accedo direttamente a un elemento?

Grazie!

+0

È questo il codice esatto dalla tua pagina? – clav

+0

Sì, sto solo usando un semplice tavolo generico fino a farlo funzionare correttamente. –

risposta

3

C'è uno spazio in più dopo ${row} che sta causando l'elenco di "toStringed" su questa riga , modificarlo in <c:forEach var="item" items="${row}"> e sarete a posto.

+0

Infatti, si noti anche che lo spazio extra è finito dopo ']' nell'output. – BalusC

+0

Wow, bella cattura. – Alex

+0

Wow. Grazie! –

0

Hai detto che dataTable è un elenco di stringhe - ciò significa che il tag interno forEach sta iterando su una stringa. Nell'implementazione di Apache JSTL (1.2 codice sorgente here), l'iterazione su una stringa la analizza in token separati da virgole. Quindi la stringa "[A, B, C]" viene analizzata nell'elenco ["[A", " B", " C]"'.

Per ottenere il comportamento desiderato, provare a definire dataTable utilizzando elenchi nidificati, ad es. [["A", "B", "C"], ["1", "2", "3"]] anziché ["[A, B, C]", "[1, 2, 3]"].

+0

dataTable è un elenco di elenchi di stringhe, prima che fosse inserito nell'attributo è stato inizializzato come ArrayList > –

+0

Quindi è possibile inserire il codice che inizializza dataTable? – Alex

Problemi correlati