如何在FreeMarker中迭代HashMap?

时间:2014-05-02 15:59:18

标签: java hashmap freemarker

我使用这个类来包装我想要在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

而不是我想要的地图。我不知道为什么。

1 个答案:

答案 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>...等等。