РЕДАКТИРОВАТЬ: Я должен был уточнить заранее: нет способа сделать то, что вы пытаетесь сделать с синтаксисом параметров фрагмента . Мой подход ниже - это обходной путь.
Предполагая, что у вас есть следующий объект в качестве отправной точки:
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>
.