web-dev-qa-db-fra.com

Comment utiliser "map.get (clé)" dans Thymeleaf - Broadleaf Ecom

J'ai un Hashmap (String, List<Offers>), passé à une page Thymeleaf. Je reçois cette carte sur la page et je peux y accéder.

Comment puis-je utiliser map.get(key) avec Thymeleaf? J'ai juste besoin d'extraire les valeurs en fonction d'une certaine clé, puis d'analyser et d'imprimer cette valeur, que je connais et dont j'ai la logique.

J'utilise une application Broadleaf et Thymeleaf en est le moteur d'interface utilisateur.

13
Sumit Rathore

Vous pouvez simplement utiliser ${map.get('key')}

16
Prabhat

Utiliser ${map.get(key)} (où key est une variable) fonctionne pour moi.

${map['key']} ne semble fonctionner que pour Littéral de chaîne keys - si la key que vous recherchez est une variable then ${map[key]} ne semble pas fonctionner .

Accéder aux entrées de la carte avec une liste de clés

Voici un exemple complet: recherche d'éléments dans une table de hachage map étant donné listOfKeys une liste ordonnée des clés des éléments que je veux obtenir de la carte. L'utilisation d'une variable listOfKeys comme celle-ci me permet de contrôler l'ordre des itérations et, facultativement, de ne renvoyer qu'un sous-ensemble d'éléments de la carte:

<ul>
    <li th:each="key: ${listOfKeys}"">
        <span th:text="${key}"></span> = <span th:text="${map.get(key)}"></span>
    </li>
</ul>

Parcourant chaque entrée d'une carte

Si vous ne disposez pas d'une liste ordonnée de clés, mais souhaitez simplement parcourir chaque élément de la carte, vous pouvez parcourir directement la fonction keySet() de la carte (mais vous ne pourrez pas contrôler l'ordre votre carte est une HashMap):

<ul>
    <li th:each="key: ${map.keySet()}">
        <span th:text="${key}"></span> = <span th:text="${map.get(key)}"></span>
    </li>
</ul>

Cet usage peut être exprimé de manière encore plus concise en parcourant simplement la entrySet de la carte et en accédant aux membres key et value de chaque entrée renvoyée:

<ul>
    <li th:each="entry: ${map}">
        <span th:text="${entry.key}"></span> = <span th:text="${entry.value}"></span>
    </li>
</ul>
10
Matt Coubrough

Le moyen d'accéder à la valeur:

${map[__${key}__]}

Vous devez placer la clé entre les traits de soulignement doublés pour effectuer un traitement préalable de la variable clé.

5
Vlad

Dans ma situation, où j'avais un HashMap<String, String>, je devais faire la recherche comme ceci

<strong th:text="${map['__${entry.key}__']}"></strong>
2
fstef

J'utilise avec la liste déroulante ce qui suit, par exemple, pour boucler des clés sur des cartes

<select id="testId">
        <option th:each="item: ${itemsMap}" 
                th:value="${item['key']}"
                th:text="${item['value']}" />
</select>

en cas d'obtenir une valeur spécifique, j'utilise

${itemsMap.get('key')}
1
Hany Sakr

La façon d'accéder à la valeur de la carte pour une certaine clé keyaccess, en supposant que vous avez la carte mymap dans votre modèle:

${mymap['keyaccess']}

Cela vous donnerait la liste associée à votre entrée, vous pouvez maintenant la parcourir.

Si vous en avez besoin, vous pouvez itérer une carte de la même manière que tout autre objet itérable pris en charge, à partir de documentation :

Non seulement les objets Java.util.List peuvent être utilisés pour une itération dans Thymeleaf. En fait, il existe un ensemble assez complet d'objets qui sont considéré comme itérable par un th: chaque attribut:

  • Tout objet implémentant Java.util.Iterable
  • Tout objet implémentant Java.util.Map. Lors de l'itération de cartes, les variables itératives seront de classe Java.util.Map.Entry.
  • N'importe quel tableau
  • Tout autre objet sera traité comme s'il s'agissait d'une liste à valeur unique contenant l'objet lui-même.
1
Leandro Carracedo

remarquesMap est TreeMap et "id" est un type long 

<div th:if="${#maps.containsKey(remarksMap, id)}">
   <textarea th:text="${remarksMap.get(id)}" rows="2" cols="30" maxlength="250" 
       autocomplete="off"></textarea>                               
</div>
0
R M