【问题标题】:Freemarker HashMap loop having pojos具有 pojos 的 Freemarker HashMap 循环
【发布时间】:2013-02-21 21:06:55
【问题描述】:

我有 HashMap 汽车,而 pojo Car 包含属性“engines”,它又是 HashMap。

public class Car implements Serializable{
       private Long id;
       private String name;
       private Map<Long,Engine> engines = new HashMap<>();
       ..
       ..
}
public class Engine implements Serializable{
       private Long id;
       private String name;
}

Freemarker 模型

final StringWriter sw = new StringWriter();
Map model = new HashMap();
model.put("cars",theCarsMap);
Template tmpl = t.cfg.getTemplate("text.ftl");
tmpl.process(model, sw);

Freemarker 配置

        cfg = new Configuration();
    cfg.setCacheStorage(new freemarker.cache.MruCacheStorage(20, 250));
    cfg.setClassForTemplateLoading(getClass(), ".");
    cfg.setObjectWrapper(new DefaultObjectWrapper());

模板代码:

 <#assign rKeys = cars?keys>
 <#list rKeys as rKey>
 Car Details:${cars[rKey].getName()}\n
  --------------------------------------------------\n
 <#assign engines = cars[rKey].getEngines()>
 <#assign tKeys = engines?keys>
 <#list tKeys as tKey>
 ------------------Engine Details-----------------\n
 Name: ${engines[tKey].getName()}\n
 </#list>
 </#list>

我收到以下错误:

有问题的指令:

${cars[rKey].getName()} [on line 3, column 18 in text.ftl]

是否有任何与包含 pojos 和另一个 Map 的 HashMap 相关的特殊处理?

【问题讨论】:

  • 粘贴完成错误信息。

标签: java freemarker


【解决方案1】:

它不适用于以 POJO 作为值的 Map,我必须更改为 List.... 并且原始类型的 java 对象包装器也不起作用,更改为原始定义。即长--->长

<#list cars as c>
 ${c.id!'Unknown'} - ${c.name!'Unknown'}

 <#list c.engineList as t>
    ${t.id!'Unknown'} - ${t.name!'Unknown'}
 </#list>
 </#list>

【讨论】:

  • @agp - 我经常做这两件事(地图中的 POJO,对象包装器)。但考虑到你懒得给这里的人提供足够的信息来真正帮助你,我也懒得回应。
猜你喜欢
  • 2021-11-06
  • 2012-06-04
  • 2010-12-02
  • 2023-03-23
  • 2017-05-23
  • 1970-01-01
  • 2020-07-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多