1

私は HashMap 車を持っています。pojo Car には 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;
}

フリーマーカーモデル

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

フリーマーカー構成

        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]

pojo と別の Map を含む HashMap に関連する特別な処理はありますか?

4

1 に答える 1

0

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>
于 2013-02-21T22:52:23.803 に答える