我可以将String []列表传递给Freemarker吗?

时间:2016-08-04 22:33:16

标签: java html arrays freemarker

我用于freemarker处理的数据模型是

Map<String, Object> templateDataModel = new HashMap<>();

我有一个字符串数组列表,我想像这样传递到这个地图:

ArrayList<String[]> listOfServers = new ArrayList<>();

for (Server server : object.getServers) {
    String[] ser = new String[2];
    //get the name
    ser[0] = server.getName();
    //get the port
    ser[1] = server.getPort();

    lostOfServers.add(ser);
}

templateDataModel.put(serverList, listOfServers);

arraylist背后的原因是服务器至少有2个数据点(在这种情况下是名称和端口)和字符串列表或其他集合不能保存我需要的(如果我是正确的)错)。

在我的freeMarker模板中,我想循环这个服务器列表并显示各种不同的值,如下所示:

<#list serverList as server>
    <tr>
        <td>${server[0]}</th>
    </tr>
    <tr>
        <td>${server[1]}</th>
    </tr>
</#list>

我在输出中收到此消息:

freemarker.template.DefaultObjectWrapper didn't convert java.util.ArrayList to a TemplateHashModel. 
Generally, you want to use a Map<String, Object> or a JavaBean as the root-map (aka. data-model) parameter. The Map key-s or JavaBean property names will be the variable names in the template.

好像我不能这样做。它是否正确?如果是这样,freemarker支持的数据结构的建议是什么?

我是Java的新手,并且正在阅读freemarker。请原谅我不理解的任何基本的东西,但我真的想让这个自由标记的东西起作用。

编辑:**************************

我决定使用

Map<String, List<List<String>>>

而不是

Map<String, List<String[]>>

模板现在看起来像这样:

<#list serverEntries as serverEntry>
    <tr>
        <#list serverEntry as serverAttribute>
            <td>${serverAttribute}</th>
        </#list>
    </tr>
</#list>

1 个答案:

答案 0 :(得分:0)

从错误消息显示您已将listOfServers(或其他ArrayList}传递给Template.process(或Environment.process),而不是templateDataModel