自
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。如何解决这个问题?
作为可选参数的解决方法,我想出了以下方法:
片段:
<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>