在Freemarker中,模型中有Map<Map<...>>
。
由于FM故障,查询第二级Map
需要?api
。但是,这会逃避正常值存在检查并使事情变得复杂。
这就是我所拥有的:
<#if sortedStatsMap[rowTag.name]?? && sortedStatsMap[rowTag.name]?is_hash>
${mapToJson(sortedStatsMap[rowTag.name]?api.get(boxTag.name))!}
</#if>
这最终得到:
APINotSupportedTemplateException: The value doesn't support ?api. See requirements in the FreeMarker Manual.
(FTL type: sequence+extended_hash+string (wrapper: f.c.DefaultToExpression$EmptyStringAndSequence),
TemplateModel class: f.c.DefaultToExpression$EmptyStringAndSequence,
ObjectWapper: freemarker.template.DefaultObjectWrapper@1074040321(2.3.26, useAdaptersForContainers=true, forceLegacyNonListCollections=true, iterableSupport=trueexposureLevel=1, exposeFields=false, treatDefaultMethodsAsBeanMembers=true, sharedClassIntrospCache=@1896185155, ...))
The blamed expression:
==> sortedStatsMap[rowTag.name]! [in template "reports/templates/techReport-boxes.ftl" at line 152, column 84]
如果我尝试
sortedStatsMap[rowTag.name]!?is_hash
然后这也失败了,因为如果遗漏,它会让我empty_string_and_sequence
并且?is_hash
无法应用,据报道。 (说错误。)
检查我是否可以使用?api.get(key)
的正确逻辑是什么?或者使用!
处理缺失值或丢失密钥的正确方法?
答案 0 :(得分:0)
您可以使用?api
检查值是否支持?has_api
。虽然也许你不需要那个;应该澄清这个例子和与之相关的问题(见我的评论)。