我使用这个类来包装我想要在html中看到的地图:
public class ChartTimes {
String text;
Map<Integer,Integer> groups_time;
//other code
public Map<Integer, Integer> getGroups_time() {
return groups_time;
}
public String getText() {
return text;
}
}
所以我向freemarker发送了我的课程列表&#34; ChartTimes&#34;
List<ChartTimes> timechart_list = new ArrayList();
//other code
request.setAttribute("times", timechart_list);
这是html代码:
<#list times as time>
${time.text?html}
<#list time.groups_time?keys as key>
${key} - ${time.groups_time[key]}
</#list>
</#list>
但输出是这个怪物:
- { getClass - clone - 2 - = 3 - 0 put - 4 - , remove - get - equals - entrySet - 9 - , class - class java.util.LinkedHashMap hashCode -
keySet - size - clear - isEmpty - containsKey - values - empty -
containsValue - toString - putAll - 0 - { getClass - clone - 2 - = 3 -
0 put - 4 - , remove - get - equals - entrySet - 9 - 0 class - class
java.util.LinkedHashMap hashCode - keySet - size - clear - isEmpty -
containsKey - values - empty - containsValue - toString - putAll
而不是我想要的地图。我不知道为什么。
答案 0 :(得分:1)
FTL没有Map
类型。它有一个所谓的哈希类型,它只是可以有子变量的东西,?keys
列出了子变量名称(应该是字符串)。您看到的键取决于FreeMarker的objectWrapper
配置设置,在这种情况下,您会看到Map
键与方法名称混合...因为,您可以编写类似groups_time.get(foo)
的内容所以get
是一个子变量。即使您配置FreeMarker以使其不混合方法名称(默认BTW),您也可能无法使用[]
运算符和非String键。无论如何,既然在这里您可以访问Map
API,就可以使用它。 <#list time.groups_time.entrySet() as keyValuePair>...
等等。