【问题标题】:Freemarker - how to loop on the same list twice?Freemarker - 如何在同一个列表上循环两次?
【发布时间】:2011-11-18 21:56:35
【问题描述】:

在同一个循环上迭代两次时,出现错误:

freemarker.template.SimpleSequence 不能转换为 java.util.List

第一个循环

<#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>

有没有办法让它工作?我做错了什么?

【问题讨论】:

    标签: freemarker


    【解决方案1】:

    不确定是否诚实。这个简单的例子有效。也许尝试剥离您的模板,看看会发生什么。我认为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    
    

    【讨论】:

      猜你喜欢
      • 2018-12-10
      • 1970-01-01
      • 2020-09-14
      • 2016-04-07
      • 2012-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-13
      相关资源
      最近更新 更多