我有一个Hashmap (String, List<Offers>)
,传递到Thymelaf页面。我在页面上看到了这张地图,我可以访问它
如何用百里香做map.get(key)
?我只需要根据某个键获取值,然后解析并打印该值,我知道并拥有该值的逻辑。
我正在运行一个Broadleaf应用程序,Thymelaf是它的UI引擎。
使用${map.get(key)}
(其中key
是一个变量)对我有用。
${map['key']}
似乎只适用于字符串文本键——如果您查找的key
是变量,则${map[key]}
似乎不起作用。
访问给定键列表的Map条目
这里有一个完整的例子,在HashMap map
中查找项目,给listOfKeys
一个我想从映射中获得的元素键的有序列表。使用这样一个单独的listOfKeys
可以控制迭代的顺序,并可以选择只返回映射中的元素子集:
<ul>
<li th:each="key: ${listOfKeys}"">
<span th:text="${key}"></span> = <span th:text="${map.get(key)}"></span>
</li>
</ul>
循环浏览地图中的每个条目
如果您没有有序的密钥列表,但只想循环浏览地图中的每个项,则可以直接循环浏览地图的keySet()
(但如果您的地图是HashMap
,则无法控制返回的密钥的顺序):
<ul>
<li th:each="key: ${map.keySet()}">
<span th:text="${key}"></span> = <span th:text="${map.get(key)}"></span>
</li>
</ul>
通过简单地遍历映射的entrySet
,并访问每个返回条目的key
和value
成员,可以更简洁地表达这种用法:
<ul>
<li th:each="entry: ${map}">
<span th:text="${entry.key}"></span> = <span th:text="${entry.value}"></span>
</li>
</ul>
您可以简单地使用${map.get('key')}
访问值的方法:
${map[__${key}__]}
您必须将键放在双下划线之间,以便对键变量进行预处理。
我使用下拉框,例如在地图上循环键
<select id="testId">
<option th:each="item: ${itemsMap}"
th:value="${item['key']}"
th:text="${item['value']}" />
</select>
如果得到一个特定的值,我使用
${itemsMap.get('key')}
在我有HashMap<String, String>
的情况下,我必须像一样进行查找
<strong th:text="${map['__${entry.key}__']}"></strong>
访问某个密钥keyaccess
的映射值的方法,假设您的模型中有映射mymap
:
${mymap['keyaccess']}
这将为您提供与条目相关联的列表,现在您可以对其进行迭代
如果需要,您可以迭代映射,就像迭代文档中任何其他支持的可迭代对象一样:
不仅java.util.List对象可以用于中的迭代胸腺。事实上,有一组相当完整的对象被认为可由th迭代:每个属性:
- 实现java.util.Iterable的任何对象
- 实现java.util.Map的任何对象。迭代映射时,iter变量将属于java.util.Map.Entry类
- 任意数组
- 任何其他对象都将被视为包含对象本身的单值列表
remaksMap是TreeMap,"id"是Long类型值
<div th:if="${#maps.containsKey(remarksMap, id)}">
<textarea th:text="${remarksMap.get(id)}" rows="2" cols="30" maxlength="250"
autocomplete="off"></textarea>
</div>
所有的答案都引导我朝着正确的方向前进。以下代码(表列详细信息)有效:
<td>[[${statusesMap.get('__${employee.status}__')}]]</td>
statusesMap是一个映射<字符串,字符串>Employee是一个具有名为"status"的字段的员工类。
注意单引号。没有他们,这是行不通的。