th:include,th:insert和th:replace
在模板的编写中,通常希望能够引入别的模板片段,比如通用的头部和页脚。Thymeleaf模板引擎的th:include
,th:insert
和th:replace
属性可以轻松的实现该需求。不过从Thymeleaf 3.0版本后, 不再推荐使用th:include
属性。
在index.html页面路径下创建一个footer.html:
1 |
|
在footer.html中,使用th:fragment
属性定义了<footer>
片段,然后在index.html中引用它:
1 | <div th:include="~{footer :: copy}"></div> |
其中footer为被引用的模板名称(templatename),copy为th:fragment
标记的片段名称(selector),~{...}
称为片段表达式,由于其不是一个复杂的片段表达式,所以可以简写为:
1 | <div th:include="footer :: copy"></div> |
页面显示如下:
通过观察渲染出的源码可发现th:include
,th:insert
和th:replace
的区别所在:
1 | <div> |
引用本页面的片段可以略去templatename,或者使用this来代替。
引用没有th:fragment的片段
如果片段不包含th:fragment
属性,我们可以使用CSS选择器来选中该片段,如:
1 | <div id="copy-section"> |
引用方式:
1 | <div th:insert="~{footer :: #copy-section}"></div> |
在th:fragment中使用参数
使用th:fragment定义的片段可以指定一组参数:
1 | <div th:fragment="frag (onevar,twovar)"> |
然后在引用的时候给这两个参数赋值,有如下两种方式:
1 | <div th:replace="this :: frag ('value1','value2')"></div> |
对于第二种方式,onevar和twovar的顺序不重要,并且使用第二种方式引用片段时,片段可以简写为:
1 | <div th:fragment="frag"> |
th:remove
th:remove
用于删除片段,支持的属性值有:
all:删除标签及其所有子标签。
body:不删除包含的标签,但删除其所有子代。
tag:删除包含的标签,但不要删除其子标签。
all-but-first:删除除第一个之外的所有包含标签的子标签。
none。
比如有如下片段:
1 | <table border="1"> |
当value为all时,页面渲染为:
1 | <table border="1"> |
当value为body时,页面渲染为:
1 | <table border="1"> |
当value为tag时,页面渲染为:
1 | <table border="1"> |
当value为all-but-first时,页面渲染为:
1 | <table border="1"> |