Using ${map.get(key)}
(where key
is a variable) works for me.
${map['key']}
only seems to work for String literal keys -- if the key
you're looking up is a variable then ${map[key]}
doesn't seem to work.
Accessing Map entries given a list of keys
Here's a full example, looking up items in a HashMap map
given listOfKeys
an ordered List of the keys of elements I want to get from the map. Using a separate listOfKeys
like this lets me control the order of iteration, and optionally return only a subset of elements from the map:
<ul>
<li th:each="key: ${listOfKeys}"">
<span th:text="${key}"></span> = <span th:text="${map.get(key)}"></span>
</li>
</ul>
Looping through every entry in a Map
If you do not have an ordered list of keys, but just want to loop through every item in the Map, then you can loop directly through the map's keySet()
(But you will have no control of the ordering of keys returned if your map is a HashMap
):
<ul>
<li th:each="key: ${map.keySet()}">
<span th:text="${key}"></span> = <span th:text="${map.get(key)}"></span>
</li>
</ul>
This usage can be expressed even more concisely by simply iterating through the entrySet
of the map, and accessing each returned entry's key
and value
members:
<ul>
<li th:each="entry: ${map}">
<span th:text="${entry.key}"></span> = <span th:text="${entry.value}"></span>
</li>
</ul>
map['key']
always returns a String. Additionally it seems thatmap.get('key')
also always returns a String. If my map contains an object, how can I return that type in thymeleaf? (Outside of Java,map.get('key').getClass()
returns the correct object type). – Freak