当你在同一个标签中写下一个以上的 th:* 属性时会发生什么?比如说:
<ul> <li th:each="item : ${items}" th:text="${item.description}">Item description here...</li> </ul>
我们希望 th:each 属性在 th:text 之前执行,这样我们就能得到我们想要的结果,但鉴于 HTML/XML 标准没有对标签中属性的书写顺序赋予任何意义,因此必须在属性本身中建立一个优先机制,以确保这将按预期的方式工作。
因此,所有 Thymeleaf 属性都定义了一个数字优先级,它确定了它们在标签中执行的顺序。这个顺序是:
顺序 | 特性 | 属性 |
---|---|---|
1 | Fragment inclusion | th:replace |
2 | Fragment iteration | th:each |
3 | Conditional evaluation | th:case |
4 | Local variable definition | th:with |
5 | General attribute modification | th:attrappend |
6 | Specific attribute modification | ... |
7 | Text (tag body modification) | th:utext |
8 | Fragment specification | th:fragment |
9 | Fragment removal | th:remove |
这种优先机制意味着,如果属性位置倒置,上述迭代片段将给出完全相同的结果(尽管它的可读性会稍差):
<ul> <li th:text="${item.description}" th:each="item : ${items}">Item description here...</li> </ul>