我通过Controller传递以下内容:
HashMap<SomeClassA, ArrayList<SomeClassB>>
SomeClassA和SomeClassB不是原语,由我编码。他们的吸气剂是Strings或Longs。让我们调用HashMap变量map123
。
我想要做的就是有这样的代码:
<#list map123?keys as key>
${key} = ${map123[key]}
</#list>
然而,我得到的是map123 [key]是一个NULL! 这意味着我无法迭代ArrayList。
我做错了什么(或者我应该做什么)?
答案 0 :(得分:1)
这很容易成为FreeMarker 2中最成问题的遗产,但它有解决方法。 []
运算符不支持非字符串键。这将是一个错误,但由于与另一个遗产的不幸合作,通常会发生的事情是查找是使用对象的toString()
静默完成的,因此您根本找不到该项。
解决方法:如果您只需要迭代,只需使用至少版本2.3.25-incubating
(这是一个稳定的最终版本)并写下:
<#list map123 as key, value>
${key} = ${value}
</#list>
如果必须按键获取值,则可以回退到Map
:map123?api.get(key)
的Java API。 (请注意,必须在FreeMarker配置中明确启用?api
,但错误消息会告诉您。)
答案 1 :(得分:1)
如果您不能使用键值对(自2.3.25开始)
<#list map123 as key, value>
${key} = ${value}
</#list>
你可以尝试
<#list map123.entrySet() as entry >
${entry.key} = ${entry.value}
</#list>
您可以使用null
指令或仅?exists
${entry.value!"default"}
值