Freemarker:访问列表中的元素

时间:2017-03-10 10:01:59

标签: java markdown freemarker

我目前有以下结构:

List<List<ClusterEntry>> clusters = new ArrayList<List<ClusterEntry>>();
//fill clusters and the list in clusters
input.put("clusters", clusters);

群集描述了我的群集和cluster.get(i)包含一个群集中的所有元素。 对于报告,我想将此结果与freemarker一起输出到.md文件中 目标是拥有与集群一样多的列,并在每行中包含相应集群的条目。 这是我的.ftl代码:

<#list clusters as c> | Cluster ${c_index} |
<#list c[c_index] as entry> | ${entry.name} | </#list>
</#list>

但是,这会导致以下错误

The value you try to list is an extended_hash+string (package.ClusterEntry wrapped into f.e.b.StringModel), thus you must specify two loop variables after the "as"; one for the key, and another for the value, like <#... as k, v>).

如何正确访问该条目? 如果您已经在这里阅读本文,如何使用此嵌套循环正确实现我的列行结构?目前我假设这将是单独的行

1 个答案:

答案 0 :(得分:1)

而不是<#list c[c_index] as entry><#list c as entry>,因为c已经保留了clusters中的当前列表项。

在生成一个漂亮的降价表时,它相当棘手,因为在开始渲染任何东西之前你必须知道最长嵌套List<ClusterEntry>的长度。此外,如果它必须在源级别上看起来很好,您还必须计算出每列的最大宽度。在模板中计算这些东西并不好......也许你应该用Java做到这一点并将信息传递给数据模型中的模板。