如何从 Thymeleaf 3.1 中的 th:include 迁移?

问题描述 投票:0回答:1

thymeleaf-3.1
th:include
已弃用 ( https://github.com/thymeleaf/thymeleaf/issues/913),所以我正在尝试迁移我的包含内容,但没有成功。

我的目标是拥有一个片段,定义一个带有一堆内容的表

th
元素。 现在,仅对于表中的第一个元素,我想应用不同的 css
style
(在本例中:
text-align:right
)。 这是我以前的经历:

home.html

<table>
 <thead>
  <tr>
    <th scope="col" th:include="~{components/tableheader :: tableheader('test')}" 
        style="text-align:right"/>
  </tr>
 </thead>
</table>

components/tableheader.html

<html xmlns="http://www.w3.org/1999/html" xmlns:th="http://www.thymeleaf.org">
        <th scope="col" th:fragment="tableheader(text)">
            <div th:text="${text}"/>
            <!-- other stuff-->
        </th>
</html>

这很好,渲染为:

<table>
 <thead>
  <tr>
    <th scope="col" style="text-align:right">
        <div>test</div>
    </th>
  </tr>
 </thead>
</table>

但是:

th:include
在最新的 thymeleaf 版本中已被弃用,建议使用
th:insert

问题:

th:insert
丢失了应用的额外样式plus插入了一个幽灵行,然后显示为:

<table>
 <thead>
  <tr>
    <th scope="col" style="text-align:right"></th>  <!-- that is the problem -->
    <th scope="col">
        <div>test</div>
    </th>
  </tr>
 </thead>
</table>

所以你看,I 不能简单地替换 th:include。如何解决这个问题?

java thymeleaf
1个回答
0
投票

作为可选参数的解决方法,我想出了以下方法:

片段:

        <th scope="col" th:fragment="tableheader(text)"
                th:with="style=${style != null ? style : ''}, title=${title != null ? title : ''}"
                th:style="${style}" 
                th:title="title=${title}">
            <div th:text="${text}"/>
            <!-- other stuff-->
        </th>

用途:

          <tr>
            <th scope="col" th:include="~{components/tableheader :: tableheader('testNoStyle'}"/>
            <th scope="col" th:include="~{components/tableheader :: tableheader(text='testWithStyle', style='text-align:right')}"/>
        </tr>
© www.soinside.com 2019 - 2024. All rights reserved.