freemarker可以用来输出自定义集合吗?

Posted

技术标签:

【中文标题】freemarker可以用来输出自定义集合吗?【英文标题】:can freemarker be used to output custom collections? 【发布时间】:2011-01-02 08:32:16 【问题描述】:

可以用freemarker循环遍历集合,输出集合中每一项的属性吗?

此集合属性将是动态的,即不能硬编码,将从数据库生成。

我在寻找什么:能够指向不同的数据库,并遍历每个表并输出表列。

【问题讨论】:

【参考方案1】:

可能,尽管这取决于数据在 Java 领域中的结构。 Freemarker 处理集合(散列、序列)的基本操作。如果你在 Java 中有一个 Map,Freemarker 会让你像“哈希”一样使用它(你可以直接获取它的键),而 Java 中的列表看起来像 Freemaker 中的“序列”。

如果你有,比如说,在 Java 中,List<List<String>> 代表一个表列表,那么你可以像这样在 FTL 中遍历它们:

<#-- getMyTables() is a call into the primary template model object -->
<#assign myTables = getMyTables() />
<#list myTables as table>
  <#list table as column>
    $column
  </#list> 
</#list>

如果您的集合是未实现 List 或 Map 接口的自定义类,那么您当然可以直接访问它们的方法(Freemarker 支持直接访问其模板模型上的方法以及您可以从模板中获取的任何内容模型)。例如

<#-- getMyTablesAsList() is a call into the primary template model object -->
<#assign myTables = getMyTablesAsList() />
<#list myTables as table>
  <#list table.getColumnNames() as column>
    $column
  </#list> 
</#list>

【讨论】:

哇,这太棒了,它为最终用户提供了一种安全的输出方式吗?就像他们只能访问我们注入到视图页面中的类? 是的,您必须手动将其注入,才能在 freemarker 中引用该对象

以上是关于freemarker可以用来输出自定义集合吗?的主要内容,如果未能解决你的问题,请参考以下文章

使用 freemarker 为自定义变量格式化 xml 模板

FreeMarker技术总结(转载)

请问各位,FreeMarker怎么用?专门用来读取XML数据吗?

Apache FreeMarker

freemarker中调用java方法,除了内建函数,自定义的怎么调用?

在 Freemarker 中实现自定义 Escaper