Thymeleaf - Variablen an Fragmente übergeben

Sep 21 2020

Ich habe folgende Vorlage mit Fragment, in der ich Variable übergebe:

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

Wenn ich versuche, es zu rendern, wird eine Fehlermeldung angezeigt:

Property or field 'name' cannot be found on null

Wenn ich es so rendere

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

Was mache ich falsch, wenn ich dem Fragment eine Variable zuweise?

Antworten

michal.jakubeczy Sep 21 2020 at 21:47

Herausgefunden.

Der Grund für den Fehler war, dass das 'innere' Fragment während des Renderns zusammen mit dem Hauptfragment gerendert wurde. Also zusammen mit Einschlüssen, wenn von selbst gerendert wurde. Und dieser letzte Render hat es verdorben.

Mögliche Lösungen sind:

  1. Verschieben Sie das innere Fragment in eine andere Datei
  2. th:if="false"Zum 'inneren' Fragment hinzufügen , um Selbstrendering zu vermeiden (Einschlüsse funktionieren weiterhin).