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:

  1. sposta il frammento interno in un altro file
  2. aggiungere th:if="false"al frammento "interno" per evitare il rendering automatico (le inclusioni continueranno a funzionare).