2013-03-18 104 views
0

我放了兩個Map對象在ArrayList,我想基於該ArrayList的指數來顯示不同的數據,java代碼如下:如何使用Freemarker顯示List <Map <String,Object >>數據?

List<Map<String, Object>> value = new ArrayList<Map<String, Object>>(); 
value.add(originalUnitProps); 
value.add(nowUnitProps); 

而下面是我的模板文件:

<#list value as ori> 
    <#if ori_index == 0> 

     original info:<br/> 

     <#list ori?keys as key> 
      ${key}:${ori[key]} <br/> 
     </#list> 
    <#else> 
     <br/> 
     now info:<br/> 
     <#list ori?keys as key> 
      ${key}:${ori[key]} <br/> 
     </#list> 
    </#if> 
</#list> 

但它會導致一個例外:

java.lang.IllegalArgumentException異常:freemarker.template.DefaultObjectWrapper不能將java.util.ArrayList轉換爲TemplateHashModel。

回答

3

該問題與您的模板無關。顯然,你已經將value傳遞給FreeMarker作爲數據模型,但數據模型必須是Map<String, ...>TemplateHashModel。所以創建一個Map<String, Object> dataModel,把那個ArrayList轉換成一個有意義的名字,例如dataModel.put("infos", value),將dataModel傳遞給FreeMarker而不是value,然後在模板中使用<#list infos as ...>

此外,如果您有錯誤消息,下一次附加整個堆棧跟蹤。

0

我能得到這個成功運行,建立與此代碼的模型:

Map<String, Object> originalUnitProps = new HashMap<>(); 
originalUnitProps.put("Lang1", Locale.FRENCH); 
originalUnitProps.put("Lang2", Locale.CANADA_FRENCH); 

Map<String, Object> nowUnitProps = new HashMap<>(); 
nowUnitProps.put("Lang3", Locale.ENGLISH); 
nowUnitProps.put("Lang4", Locale.GERMAN); 

List<Map<String, Object>> value = new ArrayList<Map<String, Object>>(); 
value.add(originalUnitProps); 
value.add(nowUnitProps); 

model.put("value", value); 
相關問題