Question

Can freemarker be used to loop through collections and output the properties of each item in the collection?

This collections properties will be dynamic i.e. can't be hard coded, will be generated from the database.

what I am looking for: be able to point to different databases, and loop through each table and output the tables columns.

Was it helpful?

Solution

Probably, although it depends on what structure the data is in in Java land. Freemarker handles basic operations on collections (hashes, sequences). If you have a Map in Java, Freemarker will let you use it like a "hash" (you can get its keys directly), and Lists in Java look like "sequences" in Freemaker.

If you had, say, in Java, a List<List<String>> representing a list of tables, then you could walk them in FTL like:

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

If your collections are custom classes that do not implement the List or Map interfaces, then you can of course simply access their methods directly (Freemarker supports the direct access of methods on its template model and anything you can get out of the template model). E.g.

<#-- 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>
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top