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é?
$
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".
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
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']}"/>