2017-04-03 1 views
-1

Ich möchte über eine verschachtelte Sammlung innerhalb einer Karte in Freemarker 2.3.15 iterieren.Wie man über eine verschachtelte Sammlung innerhalb einer Karte in Freemarker iteriert?

gebe ich folgendes zu der Ansicht:

Map<ApplicationPropertyDefinition, Collection<ApplicationProperty>> = getValues(); 

habe ich versucht, die folgenden:

<#if propertiesByDefinition?size gt 0> 
<#list propertiesByDefinition?keys as definition> 
    <strong>${definition.externalReference!''}</strong> 

    <#list propertiesByDefinition?values as value> 
     ${value.name} 
    </#list> 

</#list> 
</#if> 

Fehler:

Expected hash. value evaluated instead to freemarker.template.SimpleSequence on line 65, column 19 in templates/propertygroup/values.txt. 
The problematic instruction: 
---------- 
==> ${value.name} escaped ${(value.name!"")?html} [on line 65, column 17 in templates/propertygroup/values.txt] 
---------- 

Wie kann ich über die verschachtelte Sammlung richtig iterieren also kann ich auf den String-Wert "name" in jedem der ApplicationProperty-Objekte zugreifen?

Antwort

0

Sie können versuchen, eine Methode hinzuzufügen, die ApplicationPropertyDefinition als Parameter verwendet und die für diesen Parameter gefundene Auflistung zurückgibt.

public Collection<ApplicationProperty> getPropertiesForDefinition(ApplicationPropertyDefinition definition) { 
    return propertiesByDefinition.get(definition) 
} 

Was würde in:

<#list propertiesByDefinition?keys as definition> 
    <strong>${definition.externalReference!''}</strong> 

    <#list getPropertiesByDefinition(definition) as value> 
     ${value.name} 
    </#list> 
</#list> 
1

Sie haben ein Collection Objekt für die gegebene definition

Versuchen Sie, diese abzurufen:

<#if propertiesByDefinition?size gt 0> 
    <#list propertiesByDefinition?keys as definition > 
     <strong>${definition.externalReference!''}</strong> 

     <#list propertiesByDefinition.get(definition) as value> 
      ${value.name} 
     </#list> 

    </#list> 
</#if> 

Und hier mit einigen Code Verbesserung :

<#if propertiesByDefinition?has_content > 
    <#list propertiesByDefinition as definition, collection > 
     <strong>${definition.externalReference!''}</strong> 

     <#list collection as value > 
      ${value.name} 
     </#list> 

    </#list> 
</#if> 

Hier bin ich mit #list Schlüssel-Wert-Paare einer Karte verfügbar seit 2.3.25 Freemarker ...

<#list map as key, value> 
    ${key} : ${value} 
</#list> 
Verwandte Themen