Итерировать на карте на карте - PullRequest
0 голосов
/ 26 апреля 2018

В Java у меня есть HashMap с записью хэш-карты под названием «CategoriesDocuments». Я могу назвать это спереди в freemarker с этим синтаксисом:

${CategoriesDocuments}

Он состоит из системы ключ / значение. Здесь значения являются категориями, которые снова являются записями TreeMap. Эта категория содержит в своих значениях путь.

В основном я хочу получить доступ к этим путям.

Я пытался получить такие первые значения:

<#list CategoriesDocuments?values as v>
 ${v}
</#list>

У меня ошибка, говорящая о том, что v должно быть числом или строкой, а не freemarker.ext.beans.SimpleMethodModel.

Когда я просто набираю $ {CategoriesDocuments}, у меня есть:

{E010=[F:\Workspace\uploads\E010108_1216.pdf, F:\Workspace\uploads\E010136.pdf, E051=[F:\Workspace\uploads\E051301_0115.pdf], E090=[F:\Workspace\uploads\E090501_0414.pdf],E230=[F:\Workspace\uploads\E230104_1113.pdf]}

E010, например, категории, и после этого у нас есть путь к файлам.

Как создать список в списке для доступа к файлам по итерации?

Большое спасибо

1 Ответ

0 голосов
/ 26 апреля 2018

Полагаю, проблема в настройке конфигурации FreeMarker object_wrapper. В некоторых приложениях, особенно в Struts, для этого используется BeansWrapper (без изменения его значения simpleMapWrapper на true), что делает эту ужасную вещь, когда Java-методы Map выставляются и смешиваются вместе с настоящие ключи. Например, CategoriesDocuments.get вернет сам метод get(Object). Таким образом, ?values такой карты будет содержать несколько методов, смешанных с фактическими ключами. Если вы не можете изменить object_wrapper (рекомендуется использовать значение по умолчанию, DefaultObjectWrapper, так как некоторые шаблоны не совместимы с этим изменением), попробуйте обойти это, используя Java API Map. выставлено: <#list someMap.values() as value>

Кроме того, FreeMarker на самом деле не может печатать структуры данных в виде карт напрямую. Вы должны перечислить их, а затем распечатать ключи и значения самостоятельно в том формате, который вам действительно нужен. В вашем случае это работает, так как просто вызывает toString(), но я бы не стал полагаться на вывод toString(), который в значительной степени предназначен только для отладки в Java.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...