Thymeleaf - meneruskan variabel ke fragmen

Sep 21 2020

Saya memiliki template berikut dengan fragmen di mana saya meneruskan variabel:

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

Jika saya mencoba membuatnya, saya mendapatkan kesalahan yang mengatakan:

Property or field 'name' cannot be found on null

Jika saya membuatnya seperti ini

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

Apa yang saya lakukan salah saat menugaskan variabel ke fragmen?

Jawaban

michal.jakubeczy Sep 21 2020 at 21:47

Menemukannya.

Alasan kesalahan adalah bahwa fragmen 'dalam' dirender selama perenderan bersama dengan fragmen utama. Begitu juga dengan inklusi jika dirender dengan sendirinya. Dan render terakhir ini merusaknya.

Solusi yang mungkin adalah:

  1. pindahkan fragmen dalam ke file lain
  2. tambahkan th:if="false"ke fragmen 'batin' untuk menghindari rendering sendiri (penyertaan akan terus berfungsi).