Thymeleaf: passa le variabili ai frammenti
Sep 21 2020
Ho il seguente modello con frammento in cui sto passando la variabile:
<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 provo a renderlo, ottengo un errore che dice:
Property or field 'name' cannot be found on null
Se lo rendo in questo modo
<div th:fragment="main">
<span>
<th:block th:include=" :: inner(${item})" />
[[${item.name}]] </span> <a> <th:block th:include=" :: inner(${item})" />
</a>
</div>
Cosa sto facendo di sbagliato quando assegno la variabile al frammento?
Risposte
michal.jakubeczy Sep 21 2020 at 21:47
Capito.
Il motivo dell'errore è che il frammento "interno" è stato renderizzato durante il rendering insieme al frammento principale. Quindi, insieme alle inclusioni, se è stato reso da solo. E questo ultimo rendering lo ha rovinato.
Le possibili soluzioni sono:
- sposta il frammento interno in un altro file
- aggiungere
th:if="false"al frammento "interno" per evitare il rendering automatico (le inclusioni continueranno a funzionare).