2010-01-07 9 views
1

Est-ce que le Freemarker peut être utilisé pour faire une boucle dans les collections et afficher les propriétés de chaque élément de la collection?peut Freemarker être utilisé pour produire des collections personnalisées?

Ces propriétés de collection seront dynamiques, c'est-à-dire qu'elles ne peuvent pas être codées en dur, seront générées à partir de la base de données. Ce que je cherche: être capable de pointer vers différentes bases de données, et faire une boucle dans chaque table et sortir les colonnes des tables.

Répondre

2

Probablement, bien que cela dépende de la structure dans laquelle se trouvent les données en Java. Freemarker gère les opérations de base sur les collections (hachages, séquences). Si vous avez une carte en Java, Freemarker vous permettra de l'utiliser comme un "hachage" (vous pouvez obtenir ses clés directement), et les listes en Java ressemblent à des "séquences" dans Freemaker.

Si vous aviez, par exemple, en Java, un List<List<String>> représentant une liste de tables, vous pouvez les marcher FTL aime:

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

Si vos collections sont des classes personnalisées qui ne mettent pas en œuvre la liste ou Les interfaces de cartes, alors vous pouvez bien sûr simplement accéder à leurs méthodes directement (Freemarker supporte l'accès direct des méthodes sur son modèle de modèle et tout ce que vous pouvez sortir du modèle de modèle). Par exemple.

<#-- 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> 
+1

wow c'est super, et il fournit un moyen sûr de sortie pour les utilisateurs finaux? comme ils ont seulement accès aux classes que nous injectons dans la page de vue? – mrblah

+0

oui, vous devrez l'injecter manuellement pour que l'objet puisse être référencé dans le Freemarker – Chii