我可以将 String[] 列表传递给 Freemarker 吗?
Posted
技术标签:
【中文标题】我可以将 String[] 列表传递给 Freemarker 吗?【英文标题】:Can I pass a List of String[] into Freemarker? 【发布时间】:2016-12-11 05:33:57 【问题描述】:我用于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。请原谅我不理解的任何基本内容,但我真的很想让这个 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】:从错误消息看来,您已将listOfServers
(或其他一些ArrayList
)传递给Template.process
(或Environment.process
),而不是templateDataModel
。
【讨论】:
我确认我正在将 MapArrayList
。也许您没有看到正确的Template.process
电话。检查堆栈跟踪中的调用位置。我不确定 Array 指令是什么意思。
这个目标就像在这篇文章中一样,Jimmy 能够调用 item.author、item.pubDate 等。我用来存储作者、pubDate、描述等的方法是使用ArrayList 传入 Map。也许这是错误的做法。我怎么能做到这一点? ***.com/questions/35468941/…
我会尝试 xml 作为数据模型以上是关于我可以将 String[] 列表传递给 Freemarker 吗?的主要内容,如果未能解决你的问题,请参考以下文章