Thymeleaf - передавать переменные фрагментам
Sep 21 2020
У меня есть следующий шаблон с фрагментом, в котором я передаю переменную:
<div th:fragment="main">
<span>
<th:block th:include=" :: inner(${item})" /> </span> <a> <th:block th:include=" :: inner(${item})" />
</a>
</div>
<th:block th:fragment="inner(item)">
[[${item.name}]]
</th:block>
Если я попытаюсь отобразить его, я получаю сообщение об ошибке:
Property or field 'name' cannot be found on null
Если я сделаю это так
<div th:fragment="main">
<span>
<th:block th:include=" :: inner(${item})" />
[[${item.name}]] </span> <a> <th:block th:include=" :: inner(${item})" />
</a>
</div>
Что я делаю неправильно при присвоении переменной фрагменту?
Ответы
michal.jakubeczy Sep 21 2020 at 21:47
Догадаться.
Причина ошибки заключалась в том, что «внутренний» фрагмент был отрисован во время рендеринга вместе с основным фрагментом. Так что вместе с вкраплениями он был нанесен сам по себе. И последний рендер все испортил.
Возможные решения:
- переместить внутренний фрагмент в другой файл
- добавить
th:if="false"во «внутренний» фрагмент, чтобы избежать саморендеринга (включения будут продолжать работать).