web-dev-qa-db-fra.com

Accéder à la valeur de la carte dans EL en utilisant une variable comme clé

J'ai un Map dans EL en tant que ${map} et j'essaye d'en obtenir la valeur en utilisant une clé qui est aussi en elle-même une variable EL ${key} avec la valeur "1000".

En utilisant ${map["1000"]} fonctionne, mais ${map["$key"]} ne marche pas. Qu'est-ce que je fais mal et comment puis-je obtenir la valeur Map en utilisant une variable comme clé?

16
user1643001

$ n'est pas le début d'un nom de variable, il indique le début d'une expression. Tu devrais utiliser ${map[key]} pour accéder à la propriété key dans la carte map.

Vous pouvez l'essayer sur une page avec un paramètre GET, en utilisant la chaîne de requête suivante, par exemple ?whatEver=something

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

Cela produira:

whatEver: something

Voir: https://stackoverflow.com/tags/el/info et faites défiler jusqu'à la section "Brace notation".

21
Jasper de Vries

J'ai déjà rencontré ce problème. Cela se produit généralement lorsque la clé n'est pas une chaîne. Le correctif consiste à convertir la clé en une chaîne avant d'utiliser la clé pour obtenir une valeur de la carte

Quelque chose comme ça:

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

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

J'espère que cela pourra aider

4
allkenang

Vous pouvez mettre la valeur-clé dans une carte du côté Java et y accéder en utilisant JSTL sur la page JSP comme ci-dessous:

Prior Java 1.7:

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

Java 1.7 et supérieur:

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

Extrait JSP:

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