2017-04-03 54 views
-1

我想在Freemarker 2.3.15的Map中迭代一个嵌套集合。如何在Freemarker中的Map中迭代嵌套集合?

我通过以下的观点:

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

我已经尝试以下操作:

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

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

</#list> 
</#if> 

错误:

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] 
---------- 

如何正确地遍历嵌套集合所以我可以访问每个ApplicationProperty对象中的字符串值“name”?

回答

0

您可以尝试添加一个将ApplicationPropertyDefinition作为参数并返回为该参数找到的集合的方法。

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

这将导致:

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

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

你要检索给定definition

一个Collection对象试试这个:有一些改进代码

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

这里:

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

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

    </#list> 
</#if> 

这里我使用的是因为Freemarker的2.3.25可用的地图#list键值对...

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