Thymeleaf 模板布局和属性优先级
in Java with 18 comment

Thymeleaf 模板布局和属性优先级

in Java with 18 comment

Thymeleaf 模板布局和属性优先级

th:insert,th:replace,th:include三者的区别

举个栗子用上面三种方式引用下面这段:

<footer th:fragment="copy">
  © 2019 https://blog.eunji.cn	"爱敲代码的猫"
</footer>

引用:

<body>

  ...

  <div th:insert="footer :: copy"></div>

  <div th:replace="footer :: copy"></div>

  <div th:include="footer :: copy"></div>
  
</body>

最终会是下面这种效果:

<body>

  ...

  <div>
    <footer>
      © 2019 https://blog.eunji.cn	"爱敲代码的猫"
    </footer>
  </div>

  <footer>
    © 2019 https://blog.eunji.cn	"爱敲代码的猫"
  </footer>

  <div>
    © 2019 https://blog.eunji.cn	"爱敲代码的猫"
  </div>
  
</body>

属性优先级

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>

文章会同步更新到微信公众号和小程序哦

可以关注微信公众号:爱敲代码的猫

18评论
  • c

    特效优秀

  • I'M LZQ

    近距离

  • I'M LZQ

    66666

  • I'M LZQ

    66666

  • I'M LZQ

    666

  • I'M LZQ

    不错

  • 非常棒

  • Latin

    弹幕有点卡