Freemarker 使用带有宏的映射值

Freemarker using Map values with macro

我正在使用 Freemarker 宏来管理两个地图的内容。

<#macro MACRO_NAME v>
       <#nested v.val, v.msg>
</#macro>

水果图的结构是这样的

Map("fruits" -> Map("val", Map("banana" -> "yellow, "orange" -> "orange"), "msg" -> 空))

而另一张地图,动物,看起来像这样

地图("animals" -> 地图("insects" -> 地图("butterflies" -> 地图("val" -> 地图("Hasora anura" -> "blue", Hasora badra -> "yellow"), "msg" -> null))))

如果 val 为 null 也没关系,因为我检查了我的 Freemarker 代码。如果 fruits.val 为空,则以下代码将输出 false, false(正确行为)

${fruits.val???c}
<@MACRO_NAME fruits; fu, fuMsg>
  ${fu???c}
</@MACRO_NAME>

${animals.insects.butterflies.val???c}
<@MACRO_NAME animals.insects.butterflies; butterflies, buMsg>
  ${butterflies???c}
</@MACRO_NAME>

但我的问题是,如果 animals.insects.butterflies.val 为 null,这将输出 false,true 但它也应该是 false,false。

我不知道为什么会这样。

哇,我觉得这真是奇怪的行为

答案是:永远,永远不要像您的地图键那样命名循环变量。

<@MACRO_NAME animals.insects.butterflies; bu, buMsg> 而不是 <@MACRO_NAME animals.insects.butterflies;蝴蝶,buMsg> 会起作用...

这只是一个命名问题。