在Freemarker中的Object:List映射上迭代
我试图在一个HashMap上迭代freemarker模板。 映射的键或值中不包含任何空值 Freemarker中的代码是:在Freemarker中的Object:List映射上迭代,freemarker,Freemarker,我试图在一个HashMap上迭代freemarker模板。 映射的键或值中不包含任何空值 Freemarker中的代码是: <#list subscriptionsWithPiNotices?keys as s> ${s.title} <#list subscriptionsWithPiNotices[s] as piNotice> Autoritate contractanta: ${piNotice.contractingAuthorityNam
<#list subscriptionsWithPiNotices?keys as s>
${s.title}
<#list subscriptionsWithPiNotices[s] as piNotice>
Autoritate contractanta: ${piNotice.contractingAuthorityName}
.
.
</#list>
</#list>
==>使用Pinotices[s]订阅[在第21行第16列的模板seap-subscription-newsletter.ftl中]
提示:如果已知失败的表达式在法律上为空/缺失,
使用myOptionalVar指定默认值!myDefault,或使用
当出现时,当丢失时。这些
只覆盖表达式的最后一步;包罗万象
表达式,使用括号:myOptionVar.foo!我的默认,
myOptionVar.foo
失败的指令FTL堆栈跟踪:
==>列出带有Pinotice[s]的订阅。。。[模板seap-subscription-newsletter.ftl第21行第9列]
使用Pinotices?键列出订阅。。。[模板seap-subscription-newsletter.ftl第18行第5列]
我重复一遍,我转储了HashMap,它只有一个键,一个ArrayList中有一个项。所以没有理由报告空值,是吗?最后,我通过配置
BeansWrapper bw = BeansWrapper.getDefaultInstance();
bw.setSimpleMapWrapper(true);
cfg.setObjectWrapper(bw);
然后使用
mapkey语法,而不是map[key]或map.key。它似乎适用于任何类型的键类。因此这是[]运算符遇到的老问题。从2.3.22开始,您可以使用someMap?api.getsomeNonStringKey来解决这个问题。它需要一些配置才能启用,但不会破坏现有应用程序。请参阅或。这是一个由来已久的FTL问题,它没有地图类型。它有一个哈希类型,但只支持子变量的字符串键。然后BeansWrapper静默地将字符串s作为[]需要一个字符串,然后它当然找不到映射项。。。关于可能的解决方法,您会找到一些答案。密钥的类型是什么?问题是,您使用的是纯BeansWrapper,它有自己的缺点,而且在使用DefaultObjectWapper的设置上也不起作用。由于2.3.22,您可以使用更好的解决方案??api。看到或看到。
BeansWrapper bw = BeansWrapper.getDefaultInstance();
bw.setSimpleMapWrapper(true);
cfg.setObjectWrapper(bw);