2012-08-09 6 views
5

Con un ciclo forEach vorrei creare celle di tabella (per una riga) mentre ogni cella contiene un campo di input di un modulo. Il numero di celle di una tabella è sempre corretto (12). Questo in realtà non è un problema. Tuttavia, ecco la sfida: forEach dovrebbe anche inserire un numero variabile di valori predefiniti nei campi di input che devono essere ottenuti da una mappa (lunga, doppia).Come utilizzare la variabile index di un ciclo JSTL forEach per accedere a una voce della mappa?

Questa è la mia (semplificato) tentativo:

<c:forEach var="number" begin="1" end="12" > 
    <td> 
     <input type="text" value="${requestScope.aMapWithData[number]}" /> 
    </td> 
</c:forEach> 

Ma questo non mostra alcun valore dalla mappa nei campi di immissione. Credo che il problema è che "numero" è di tipo String e non Long. Quindi mi chiedo se questo problema può essere risolto senza l'uso di scriptlet.

+1

Vedere [questo thread] (http://stackoverflow.com/questions/924451/jstl-access-a-map-value-by-key). Soprattutto la risposta accettata, e [questo] (http://stackoverflow.com/a/5474399/1344008) – npe

+0

Thx per il suggerimento! Il trucco con il cast di tipo implicito funziona molto bene: value = "$ {requestScope.aMapWithData [numero + 0]}" – mvk

risposta

0

Prova questa

<c:forEach items="${aMapWithData}" var="mapEntry"> 
    <c:set var="mapKey" value="${mapEntry.key}"></c:set> 
    <c:set var="mapValue" value="${mapEntry.value}"></c:set> 
</c:forEach> 
+0

Ho sbagliato ^^ Questo non funziona, poiché ho sempre bisogno di 12 celle ... – mvk

+0

È necessario per specificare quali sono le chiavi possibili nella tua mappa. – vikas

+0

Le possibili chiavi della mappa sono numeri (lunghi) compresi tra 1 e 12 – mvk

7

Che numero vuoi mostrare? È il numero di indice di ciascuna voce della mappa?

<c:forEach items="${aMapWithData}" var="item" varStatus="status"> 
    <td> 
     <c:out value="${status.count}."/> 
     <input type="text" name="${item.key}" value="${item.value}" /> 
    </td> 
</c:forEach> 
+0

No, voglio mostrare il valore effettivo di ciascuna voce della mappa. Anche il numero di celle dovrebbe essere corretto (12). Nella tua soluzione il numero di celle dipende dal numero di voci della mappa. – mvk

+0

Basta aggiungere gli attributi 'begin' e' end' nel tag 'forEach'. '' E otterrai il comportamento desiderato. – kapand

+0

Sfortunatamente l'aggiunta di "begin" e "end" non aiuta poiché insieme all'attributo "items" non specifica il numero (fisso) di iterazioni ma piuttosto limita quali elementi della mappa sono inclusi nelle iterazioni. – mvk

Problemi correlati