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

Догадаться.

Причина ошибки заключалась в том, что «внутренний» фрагмент был отрисован во время рендеринга вместе с основным фрагментом. Так что вместе с вкраплениями он был нанесен сам по себе. И последний рендер все испортил.

Возможные решения:

  1. переместить внутренний фрагмент в другой файл
  2. добавить th:if="false"во «внутренний» фрагмент, чтобы избежать саморендеринга (включения будут продолжать работать).