2012-09-20 1 views
13

Ho un Map in EL come ${map} e sto cercando di ottenere il valore di esso utilizzando una chiave che è di per sé anche una variabile EL ${key} con il valore "1000".Accedere al valore della mappa in EL utilizzando una variabile come chiave

L'utilizzo di ${map["1000"]} funziona ma ${map["$key"]} non funziona. Cosa sto facendo male e come posso ottenere il valore Map usando una variabile come chiave?

+1

$ non è l'inizio di un nome di variabile, indica l'inizio di un'espressione. –

risposta

-4

Penso che si dovrebbe accedere alla mappa qualcosa come:

${map.key} 

e verificare alcuni tutorial su JSTL come 1 e 2 (un po 'datato, ma ancora funzionale)

+0

Ho provato $ {map. $ Key}, ma non ha funzionato – user1643001

+0

Non $ {map. $ Key}, solo $ {map.key} – Nickmancol

19

$ non è il inizio di un nome di variabile, indica l'inizio di un'espressione. È necessario utilizzare ${map[key]} per accedere alla proprietà key nella mappa map.

Si può provare in una pagina con un parametro GET, utilizzando la seguente stringa di query per esempio ?whatEver=something

<c:set var="myParam" value="whatEver"/> 
whatEver: <c:out value="${param[myParam]}"/> 

Questo stamperà:

whatEver: something 

See: https://stackoverflow.com/tags/el/info e scorrere fino alla sezione "Notazione Brace".

+0

La soluzione non funziona: -/ –

+0

Qualcos'altro è sbagliato allora. Ho testato l'esempio nel mio post per essere sicuro che funzionasse (e che '$ {map.key}' non funzionava). –

1

È possibile inserire il valore-chiave in una mappa su Java lato e accedere allo stesso utilizzando la pagina JSTL su JSP come di seguito:

java Prima 1.7:

Map<String, String> map = new HashMap<String, String>(); 
map.put("key","value"); 

Java 1.7 e sopra:

Map<String, String> map = new HashMap<>(); 
map.put("key","value"); 

JSP Snippet:

<c:out value="${map['key']}"/> 
3

Ho affrontato questo problema prima. Ciò accade in genere quando la chiave non è una stringa. La correzione è quello di gettare la chiave per una stringa prima di utilizzare la chiave per ottenere un valore dalla mappa

Qualcosa di simile a questo:

<c:set var="keyString">${someKeyThatIsNotString}</c:set>

<c:out value="${map[keyString]}"/>

Speranza che aiuta