Как передать массив HashMaps в частичное - PullRequest
0 голосов
/ 25 февраля 2020

Я создаю приложение с Java и Thymeleaf, и мне нужно передать HashMap частичному. Я не хочу передавать его из контроллера.

Это то, что я пробовал до сих пор:

пользователь. html

<div th:replace="partials/icons.html :: icons(icons=${ {name='user', title='User'}, {name='blog', title='Blog'} })"></div>

/ partials / icons . html

<div th:fragment="icons">
    <th:block th:each="icon : ${icons}">
        <button th:class="'icon-' + ${icon.name}" th:text="${icon.title}"></button>
    </th:block>
</div>

Выдает ошибку, что = неожиданно. Какой будет правильный синтаксис?

1 Ответ

0 голосов
/ 25 февраля 2020

РЕДАКТИРОВАТЬ: Я должен был уточнить заранее: нет способа сделать то, что вы пытаетесь сделать с синтаксисом параметров фрагмента . Мой подход ниже - это обходной путь.

Предполагая, что у вас есть следующий объект в качестве отправной точки:

public class Icon {

    private String name;
    private String title;

    // getters and setters...
}

Предполагая, что у вас есть List таких объектов, named icons ...

Этот список передается вашему средству визуализации Thymeleaf обычным способом. Я не использую Spring, так как вы делаете это (я полагаю) через аннотацию. Я могу ошибаться - это не должно повлиять на подход ниже. В моем подходе без Spring список добавляется к модели Thymeleaf как map.put("icons", icons);

В моем родительском шаблоне Thymeleaf есть следующее:

<div th:replace = "/iconsfragment.html :: icons(iconlist='icons')">
</div>

У меня есть следующее в iconsfragment.html:

<div th:fragment="icons(iconlist)">
    <th:block th:each="icon : ${__${iconlist}__}">
        <div th:class="'icon-' + ${icon.name}" th:text="${icon.title}"></div>
    </th:block>
</div>

Он использует препроцессор __${...}__ для преобразования параметра (строки) обратно в итеративный объект.

В результате HTML, который вас интересует:

<div class="icon-firstName">firstTitle</div>

<div class="icon-secondName">secondTitle</div>

Это действительно имеет смысл, если вы, конечно, хотите повторно использовать этот фрагмент различными способами. В противном случае просто передайте объект ${icons} непосредственно фрагменту.

И мой пример <div>, конечно, должен быть адаптирован к вашему примеру <button>.

...