【发布时间】:2014-04-01 07:37:41
【问题描述】:
我正在尝试在 HashMap<SeapSubscription, List<PiNotice>> 上迭代 freemarker 模板。
该映射不包含任何空值(在键或值中)。
Freemarker中的代码是:
<#list subscriptionsWithPiNotices?keys as s>
${s.title}
<#list subscriptionsWithPiNotices[s] as piNotice>
Autoritate contractanta: ${piNotice.contractingAuthorityName}
.
.
</#list>
</#list>
如果我从第二个列表中删除迭代()它一切正常(即迭代地图键,但是当我添加第二部分时,试图迭代地图-s 值,我得到一个空/缺失异常
FreeMarker template error: The following has evaluated to null or missing:==> subscriptionsWithPiNotices[s] [在模板“seap-subscription-newsletter.ftl”第 21 行第 16 列]
提示:如果已知失败的表达式合法地为空/缺失, 使用 myOptionalVar!myDefault 指定默认值,或使用 何时存在何时缺失。 (这些 只覆盖表达式的最后一步;覆盖整个 表达式,使用括号: (myOptionVar.foo)!myDefault, (myOptionVar.foo)??
失败的指令(FTL 堆栈跟踪):
==> #list subscriptionsWithPiNotices[s] a... [在模板“seap-subscription-newsletter.ftl”第 21 行第 9 列] #list subscriptionsWithPiNotices?keys... [在模板“seap-subscription-newsletter.ftl”第 18 行第 5 列]
我再说一遍,我丢弃了那个 HashMap,它只有一个键,一个 ArrayList 里面有一个项目。所以没有理由报告空值,是吗?
【问题讨论】:
-
这是一个古老的 FTL 问题,它没有
Map类型。它具有“哈希”类型,但仅支持String键(用于子变量)。然后BeansWrapper默默地toString()-ss因为[]需要一个字符串,然后它当然找不到Map条目......你会找到一些关于可能的解决方法的SO答案。 -
密钥的类型是什么?
标签: freemarker