属性优先级


th:* 在同一个标​​签中写入多个属性会发生什么?例如:

<ul>
  <li th:each="item : ${items}" th:text="${item.description}">Item description here...</li>
</ul>

我们希望该th:each属性在之前执行,th:text以便我们得到我们想要的结果,但考虑到HTML / XML标准没有给标记中的属性编写顺序赋予任何意义,优先级必须在属性本身中建立机制,以确保它将按预期工作。

因此,所有Thymeleaf属性都定义了一个数字优先级,它确定了它们在标记中执行的顺序。这个顺序是:

编号 特征 属性
1 片段包含 th:insert
th:replace
2 片段迭代 th:each
3 条件评估 th:if
th:unless
th:switch
th:case
4 局部变量定义 th:object
th:with
5 一般属性修改 th:attr
th:attrprepend
th:attrappend
6 具体属性修改 th:value
th:href
th:src
...
7 文字(标签正文修改) th:text
th:utext
8 片段规范 th:fragment
9 片段删除 th:remove

这个优先级机制意味着如果属性位置被反转,上面的迭代片段将给出完全相同的结果(虽然它的可读性稍差):

<ul>
  <li th:text="${item.description}" th:each="item : ${items}">Item description here...</li>
</ul>