0

に 2 つのMapオブジェクトを配置ArrayListし、arraylist のインデックスに基づいて異なるデータを表示したい場合、Java コードは次のようになります。

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:&lt;br/>

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

ただし、例外が発生します。

java.lang.IllegalArgumentException: freemarker.template.DefaultObjectWrapper は java.util.ArrayList を TemplateHashModel に変換できませんでした。

4

2 に答える 2

3

問題はテンプレートとは関係ありません。どうやら、valueデータモデルとして FreeMarker に渡したようですが、データモデルはMap<String, ...>または である必要がありますTemplateHashModel。を作成し、 のような意味のある名前でそれにMap<String, Object> dataModel入れ、の代わりに FreeMarker に渡し、テンプレートで を使用します。ArrayListdataModel.put("infos", value)dataModelvalue<#list infos as ...>

また、エラーメッセージがある場合は、次回はスタックトレース全体を添付してください。

于 2013-03-18T21:41:50.500 に答える
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);
于 2013-03-23T14:42:16.113 に答える