我试图检查地图是否包含有条件地执行某些freemarker代码的值。这是我到目前为止所得到的:
<#if productLayout.layoutWidgetConfiguration[pos.id]??>
<#assign configId>${productLayout.layoutWidgetConfiguration[pos.id]}</#assign>
<#else>
<#assign configId></#assign>
</#if>
但是我得到了这个错误,基本上没有if条件。
Error executing FreeMarker template freemarker.core.UnexpectedTypeException: For "...[...]" left-hand operand: Expected a sequence or string (or something that's implicitly convertible to string), but this evaluated to an extended_hash (wrapper: f.t.SimpleHash):
==> productLayout.layoutWidgetConfiguration [in template "admin/pages/catalog/products/partials/productLayoutEditorRefreshZone.ftl" at line 7, column 22]
The failing instruction (print stack trace for 9 more):
==> #if productLayout.layoutWidgetConfigu... [in template "admin/pages/catalog/products/partials/productLayoutEditorRefreshZone.ftl" at line 7, column 17]
at freemarker.core.DynamicKeyName.dealWithNumericalKey(DynamicKeyName.java:141) ~[DynamicKeyName.class:2.3.20]
如何检查freemarker模板中的地图中是否存在值?
在此更新:
如果将哈希值更改为此值,哈希似乎不喜欢Long键值,if检查有效,但即使存在,该值也不会被检索 - 所以我想现在的问题是如何使用java.lang.Long
键从哈希中检索值?
<#assign configId = "">
<#if productLayout.layoutWidgetConfiguration[pos.id?string]?has_content>
Hello
<#assign configId = productLayout.layoutWidgetConfiguration[pos.id?string]>
</#if>
<h1>${pos.id}</h1>
答案 0 :(得分:1)
[]
仅支持字符串哈希(Map
等)键和数字序列(List
,数组等)索引。目前,该解决方案没有使用[]
用于Map
- s和非String键。您可以改为使用对象的Java API,例如myMap?api.get(nonStringKey)
等。请注意,配置中必须允许?api
;有关详情,请参阅http://freemarker.org/docs/ref_builtins_expert.html#ref_buitin_api_and_has_api。