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

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

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

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

【问题讨论】:

    标签: java 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 中引用该对象
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多