я передаю следующее с помощью контроллера:Итерация HashMap, который имеет нестроковую пару ключей и ArrayList в качестве значения
HashMap<SomeClassA, ArrayList<SomeClassB>>
SomeClassA и SomeClassB не примитивы, и кодируется мной. Их геттеры - это либо Струны, либо Лонги. Позволяет вызвать переменную HashMap a map123
.
То, что я пытаюсь сделать, это что-то вроде этого кода:
<#list map123?keys as key>
${key} = ${map123[key]}
</#list>
Однако то, что я получаю, что map123 [ключ] является NULL! Это означает, что я не могу перебирать ArrayList.
Что я сделал неправильно (или что я должен делать вообще)?
в версии FreeMarker Я нас ing интегрирован в FrameWork, поэтому, если обновление инфраструктуры не изменится, я не могу изменить версии. Итак, обходной путь, который я должен использовать, заключается в импровизации, присоединяя только значения, которые мне нужны от SomeClassA и SomeClassB, в один SomeClassC и передают его как список. –
Если вы не можете переопределить эту версию с более высокой (потому что фреймворк - это не просто зависимость от Maven), то, возможно, самым чистым решением является выдержка (или вытягивание через '? New') некоторой утилиты' TemplateMethodModelEx', которая получает Java-карту из своего аргумента через 'WrapperTemplateModel.getWrappedObject()', а затем создает желаемый список результатов. Итак, вы можете использовать что-то вроде '<#list mapEntries (map123) как kvp> $ {kvp.key} = $ {kvp.value}'. – ddekany
Также обратите внимание, что '? Api' был введен в FreeMarker 2.3.22, который не совсем новый. Если у вас есть '? Api' по крайней мере, вы можете сделать' <#list map123? Api.entrySet() как kvp> $ {kvp.key} = $ {kvp.value} '. – ddekany