2013-02-12 137 views
3

我有一个像下面迭代通过的HashMap中的freemarker

HashMap<String, String> testStatus = new HashMap<String, String>(); 
Map root = new HashMap(); 

public void fmTest() { 

testStatus.put("one","1"); 
testStatus.put("two","2"); 
testStatus.put("three","3"); 
root.put("status", testStatus); 
testStatus.clear(); 
} 

我FTL一个HashMap:

<#list status?keys as key> 
${key} = ${status[key]} 
</#list> 

上面的代码只是一个例子。我的问题是,如果我循环testStatus hashmap在每个循环中具有不同的值,并在循环结束时清除...我如何让freemarker显示来自每个循环的testStatus hashmap的键值对。

如果我不清除testStatus hashmap,我会得到累计结果。但是,如果我清除testStatus HashMap中的freemarker无显示..

+1

当您执行'root.put(“status”,“testStatus”)'它正在维护对同一'HashMap'的引用。它不会创建'testStatus' HashMap的副本。因此,当你清除()时,它的所有内容都被清除了。我认为要实现你想做的事情,在开始时在你的循环内创建并分配一个'new testStatus HashMap'。 – 2013-02-12 16:09:45

+0

我试过了。它没有工作。自由标记仍然显示最后一个循环的散列图结果。 – 2013-02-12 16:22:58

+2

我认为你的问题不是freemarker,很明显,清除testStatus会导致freemarker显示没有什么,但有趣的是,如果你不testStatus显示累计结果,我认为你的例子是不够的,我会问你向我们展示整个方法,循环等...来检测问题 – 2013-03-11 18:37:40

回答

0
HashMap<String, String> testStatus = new HashMap<String, String>(); 

把这个声明为fmTest方法,那么当你每次调用的方法,新的地图将投入的根源,所以他们赢了不会累积...