Freemarker迭代对象的ArrayList并访问变量?

时间:2018-02-07 20:05:47

标签: java list loops arraylist freemarker

我有以下POJO课程:

public final class Item
{
    public final long id;
    public final String hash;

    public Item(long _id, String _hash)
    {
        id = _id;
        hash = _hash;
    }
}

我有ArrayList<Item>

ArrayList<Item> list = new ArrayList<>();
list.add(new Item(1, "abc"));
list.add(new Item(2, "def"));

该列表已添加到模板中:

MODEL.addAttribute("history_list", list);

模板成功遍历列表中插入项目的次数但未能获取单个项目的属性:

<#list history_list as row>
     <p>${row.hash}</p>
<#else>
     no items here
</#list>

错误:     以下评估为null或缺失:     ==&GT; row.hash [在第9行第69行的模板“history.ftl”中]

为什么?

1 个答案:

答案 0 :(得分:3)

有这样的mail list request允许访问公共字段 解决方案是使用方法setExposeFields

DefaultObjectWrapper wrapper = new DefaultObjectWrapper(); 
wrapper.setExposeFields(true); 
FreeMarkerCfg.setObjectWrapper(wrapper); 

freemarker docs

中对此进行了解释
  

如果在BeansWrapper实例上调用setExposeFields(true),它还会将类的公共非静态字段公开为哈希键和值。即如果foo是类Bar的公共非静态字段,而bar是包装Bar实例的模板变量,则bar.foo表达式将计算为bar对象的字段foo的值。该类的所有超类中的公共字段也被公开。