Я пытаюсь проверить, содержит ли карта значение, чтобы условно выполнить некоторый код freemarker. Это то, что у меня до сих пор:проверка наличия карты в шаблоне 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?
Update Здесь:
кажется хэш не нравится Длинное значение ключа, если я могу изменить его на это, КРП проверки работы, но стоимость не получает извлекаться, даже если она существует - так что, я думаю, теперь вопрос заключается в том, как получить значение из хеша с ключом 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>
Итак, я получил эту работу, но взял «более простой» подход к преобразованию моего (к счастью) переходного хеша для использования строковых ключей (см. Здесь: http://freemarker.org/docs/app_faq.html#faq_nonstring_keys) - теперь мой код - это полный беспорядок преобразований типов, но он работает по крайней мере ... (я полностью сожалею о переходе от JSTL к Freemarker) –
Почему бы вам просто не использовать '? api', о котором также говорится в FAQ? связаны? – ddekany
Казалось, что немного длиннее, чтобы получить конфигурацию - это не так уж важно для этого экземпляра, чтобы сделать ключ строкой. –