2016-08-04 40 views
0

我使用freemarker的工艺数据模型是我可以将一个String []列表传递给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> 

回答

0

从错误消息看起来似乎已通过listOfServers(或其他一些ArrayList)至Template.process(或Environment.process),而不是templateDataModel

+0

我验证了我将Map 和StringWriter传递给了template.process方法。感谢输入 – Alan

+0

我想知道的是,如果有一个Array指令,或者如何使一个 – Alan

+0

@Alan:错误消息说你已经传入一个'ArrayList'。也许你没有看到正确的'Te​​mplate.process'调用。检查堆栈跟踪中的呼叫来自哪里。我不确定你是什么意思的数组指令。 – ddekany

相关问题