Thymeleaf - passa variáveis para fragmentos
Sep 21 2020
Eu tenho o seguinte modelo com fragmento para onde estou passando a variável:
<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>
Se tento renderizá-lo, obtenho um erro dizendo:
Property or field 'name' cannot be found on null
Se eu renderizar assim
<div th:fragment="main">
<span>
<th:block th:include=" :: inner(${item})" />
[[${item.name}]] </span> <a> <th:block th:include=" :: inner(${item})" />
</a>
</div>
O que estou fazendo de errado ao atribuir a variável ao fragmento?
Respostas
michal.jakubeczy Sep 21 2020 at 21:47
Descobri isso.
O motivo do erro foi que o fragmento 'interno' foi renderizado durante a renderização junto com o fragmento principal. Assim, junto com as inclusões, ele foi renderizado por si mesmo. E esta última renderização estragou tudo.
As soluções possíveis são:
- mova o fragmento interno para outro arquivo
- adicione
th:if="false"ao fragmento 'interno' para evitar a auto-renderização (as inclusões continuarão a funcionar).
O que significa um erro “Não é possível encontrar o símbolo” ou “Não é possível resolver o símbolo”?