2013-02-21 24 views
1

我有HashMap汽車,並且pojo Car包含屬性'engines',它又是HashMap。Freemarker HashMap循環有pojos

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] 

是否有HashMap類含POJO和另一個地圖相關的任何事情特殊處理?

+0

粘貼* complete *錯誤消息。 – parsifal 2013-02-21 21:26:45

回答

0

它沒有與POJO作爲值的Map一起工作,我不得不改變爲List ....並且對於原始類型的java對象包裝也不起作用,改爲原始定義。即Long ---> long

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

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

@agp - 我會定期做這兩件事(地圖上的POJO,對象包裝)。但鑑於你不能給這裏的人提供足夠的信息來真正幫助你,我不會很費心去迴應。 – parsifal 2013-02-22 13:44:42