我有一个名为HashMap<Integer, String>
的{{1}},由我想在Freemarker模板中呈现的对象提供。
这是Java类:
lookup
我试图像这样访问地图的值:
public class SearchResultContainer implements Container<T> {
private final Map<Integer, String> lookup;
private final List<T> items;
public SearchResultContainer(List<T> items, Map<Integer, String> lookup) {
this.lookup= lookup;
this.items = items;
}
@Override
public List<T> getItems() {
return items;
}
public Map<Integer, String> getLookup() {
return this.lookup;
}
}
我收到此错误:
对于“ ... [...]”左手操作数:预期为序列或字符串或可自动转换为字符串(数字,日期或布尔值)的内容,但已评估为extended_hash(将HashMap包装为ft DefaultMapAdapter):
==>查找[在模板[...]
[...]
提示:[]中有一个数字值。当前仅支持序列(列表)和字符串。要获取具有非字符串键的Map项,请使用myMap?api.get(myKey)。
[...]
然后我尝试按照建议使用<#-- @ftlvariable name="self" type="SearchResultContainer" -->
<#assign lookup=self.lookup/>
<#if lookup?has_content>
<#list lookup?keys as key>
${key} = ${lookup[key])}
</#list>
<#/if>
:
?api
我收到此错误:
不能使用?api,因为“ api_builtin_enabled”配置设置为false。不过,在将其设置为true之前,请三思。特别是,不应滥用它来修改Map-和Collection-s。
责备的表达方式:
==> lookup?api [在模板[...]
除了在我的<#list lookup?keys as key>
${key} = ${lookup?api.get(key)}
</#list>
类中提供其他方法或启用SearchResultContainer
(不建议使用)之外,还有其他方法可以访问地图吗?
答案 0 :(得分:0)
只需启用内置的api
。但是,您应该给它一些理由是因为它可能被滥用(很明显),这在模板作者不被完全信任的情况下是一个问题。默认情况下未启用该功能的原因是?api
在更早的版本中不存在,因此由于安全性原因,它必须是启用功能。