Freemarker:如何使用Multimap(或列表地图)

时间:2011-10-26 12:58:17

标签: java freemarker multimap

我正在尝试使用Freemarker中的 com.google.common.collect.Multimap< String,Foo>

在Multimap中,对于地图中的每个键,您将返回Collection。

我尝试了以下但是没有用:

爪哇:

context.put("itemsByCategory", itemsByCategory);

FreeMarker的:

<#list exclusiveItems?keys as cat>
    ${cat}<br/>
    <#assign items = exclusiveItems[cat]>
    <#list items as item>
        ${item.id}
    </#list>
</#list>

我遇到以下异常。它似乎将物品视为标量,虽然它实际上是一个集合。

?size is unsupported for: freemarker.ext.beans.SimpleMethodModel
The problematic instruction:
----------
==> list items as item [on line 61, column 49 in email/foo/foo-html.ftl]
----------

Java backtrace for programmers:
----------
freemarker.template.TemplateModelException: ?size is unsupportefor:freemarker.ext.beans.SimpleMethodModel

3 个答案:

答案 0 :(得分:2)

我找到了一个有效的解决方案。

我没有像在示例中那样传入Multimap实例(“itemsByCategory”),而是将Multimap转换为原始Map&gt;然后使用它可以与上面的FreeMarker片段保持一致。

希望这有助于某人。

答案 1 :(得分:1)

你说它将值视为标量,但它似乎将其视为一种方法。如果你只列出钥匙怎么办?其中是否有一些方法名称?因为那时你的问题肯定是你没有将你正在使用的simpleMapWrapper的{​​{1}} JavaBean属性设置为BeansWrapper

答案 2 :(得分:0)

您应该查看keySetasMap

keys方法将提供可能(可能会)包含重复项的密钥集合。即使键被使用了两次,这也会为每个值返回一个键。 keySet提供了一系列唯一键。