Не уверен, если честно. Этот простой пример работает. Может быть, попробуйте раздеть свой шаблон и посмотреть, что произойдет. Я думал, что getpeopleMapByGender()
может быть опечаткой с строчными буквами p
, но это будет означать, что ни один цикл не будет работать.
example.ftl
<#assign peopleMap = context.getPeopleMapByGender()>
<#foreach item in peopleMap["man"] >
${item.first_name!"Unknown"} ${item.last_name!"Unknown"}
</#foreach>
<#foreach item1 in peopleMap["man"]>
${item1.address!"Unknown"}
</#foreach>
Тестовый класс
package grimbo.test.freemarker;
import java.io.File;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapper;
import freemarker.template.Template;
public class DoubleLoop {
public static void main(String[] args) throws Exception {
Configuration cfg = new Configuration();
cfg.setDirectoryForTemplateLoading(new File("./src/test/freemarker"));
cfg.setObjectWrapper(new DefaultObjectWrapper());
Template temp = cfg.getTemplate("example.ftl");
Map root = new HashMap();
root.put("context", new Context());
Writer out = new OutputStreamWriter(System.out);
temp.process(root, out);
out.flush();
}
public static class Context {
public Map getPeopleMapByGender() {
Map m = new HashMap();
m.put("man", Arrays.asList(new Man[] { new Man(), new Man(), new Man() }));
return m;
}
}
public static class Man {
private String first_name = "first";
public String getFirst_name() {
return first_name;
}
public void setFirst_name(String first_name) {
this.first_name = first_name;
}
}
}
выход
first Unknown
first Unknown
first Unknown
Unknown
Unknown
Unknown