Thymeleaf - passe des variables aux fragments

Sep 21 2020

J'ai le modèle suivant avec le fragment où je passe la variable:

<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>

Si j'essaye de le rendre, j'obtiens une erreur disant:

Property or field 'name' cannot be found on null

Si je le rend comme ça

<div th:fragment="main">
    <span>
        <th:block th:include=" :: inner(${item})" />
        [[${item.name}]] </span> <a> <th:block th:include=" :: inner(${item})" />
    </a>
</div>

Qu'est-ce que je fais mal lors de l'attribution d'une variable à un fragment?

Réponses

michal.jakubeczy Sep 21 2020 at 21:47

Deviner.

La raison de l'erreur était que le fragment «interne» était rendu pendant le rendu avec le fragment principal. Donc, avec les inclusions, si a été rendu par lui-même. Et ce dernier rendu l'a gâté.

Les solutions possibles sont les suivantes:

  1. déplacer le fragment interne vers un autre fichier
  2. ajouter th:if="false"au fragment «interne» pour éviter le rendu automatique (les inclusions continueront de fonctionner).