Thymeleaf常用语法:模板片断

系统中的很多页面有很多公共内容,例如菜单、页脚等,这些公共内容可以提取放在一个称为“模板片断”的公共页面里面,其它页面可以引用这个
“模板片断”内容。

一、模板片断的定义

可以是html标签,也可以使用th:fragment属性定义片断。

二、引用片断

1、使用th:insert属性插入片断,除此之外,还可以使用th:replace和th:include插入。
语法:
(1) th:insert="~{模板名称}"
插入模板的整个内容

(2) th:insert="~{模板名称::选择器}"
插入模板的指定内容,选择器可以对应th:fragment定义的名称,也可以用类似JQuery选择器的语法选择部分片断。
片断选择器语法:
a) /name,选择子节点中节点名称为name的节点
b) //name,选择全部子节点中节点名称为name的节点
c) name[@attr=‘value‘] 选择名称为name并且属性值为value的节点,如有多个属性可用and连接
d) //name[@attr=‘value‘][index] 选择名称为name并且属性值为value的节点,指定节点索引
片断选择器的简化语法:
a) 可以省略 @ 符号
b) 使用 # 符号代替 id 选择,如div#id等价于div[id=‘id‘]
c) 使用 . 符号代替 class 选择,如div.class等于于div[class=‘class‘]
d) 使用 % 代替片断引用,如片断节点使用了th:ref或th:fragment,则可使用div%ref来选取节点

(3) th:insert="~{::选择器}"
不指定模板名称,则选择器作用于当前页面

(4) th:insert="~{this::选择器}"
与"~{::选择器}"类似,不同之处是在本页面找不到片断时,会到模板引擎的process方法处理的模板中寻找片断。

2、th:insert、th:replace、th:include的区别
th:insert 当前标签里面插入模板中的标签
th:replace替换当前标签为模板中的标签
th:include前标签里面插入模板的标签内容

3、模板片断也支持传入变量
引用语法:~{footer.html::名称(参数)

4、片断块引用
可以使用th:block定义片断块,th:block是一个属性容器,可以在里面添加任何的th属性。
例如表格的循环体中一般在tr中用th:each,也可以用th:block改写。

5、删除模板
使用th:remove删除模板,属性值:
all:删除当前节点,包括子节点
body:删除当前节点的全部子节点
tag:删除当前节点,不包括子节点
all-but-first:除了当前节点下面的第一个子节点,其它全部删除
none:不进行任何操作

三、使用实例

开发环境:IntelliJ IDEA 2019.2.2
Spring Boot版本:2.1.8

新建一个名称为demo的Spring Boot项目。

1、pom.xml
加入Thymeleaf依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

2、src/main/java/com/example/demo/TestController.java

package com.example.demo;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class TestController {
    @RequestMapping("/")
    public String test(){
        return "test";
    }
}

3、src/main/resources/templates/footer.html

<span th:fragment="frag1">frag1</span>
<span th:fragment="frag2">frag2</span>

<div id="footer1">footer1</div>

<div>
    <div id="footer2">footer2</div>
</div>

<div>
    <span class="content">footer3</span>
    <span class="content">footer4</span>
</div>

<div th:fragment="welcome(userName)">
    <span th:text="|hello,| + ${userName}"></span>
</div>

4、src/main/resources/templates/test.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<h4>th:insert引用片断</h4>
引用指定模板的整个内容
<div th:insert="~{footer.html}"></div>
引用指定模板的片断
<div th:insert="~{footer.html::frag1}"></div>
引用本页面的片断
<div th:insert="~{::frag3}"></div>
<div th:insert="~{this::frag3}"></div>
<div th:fragment="frag3">frag3</div>

<h4>th:replace、th:include与th:insert的区别</h4>
<div th:replace="~{footer.html::frag1}"></div>
<div th:include="~{footer.html::frag1}"></div>

<h4>片断选择器的部分用法</h4>
<div th:insert="~{footer.html::/div[@id=‘footer1‘]}"></div>
<div th:insert="~{footer.html:://div#footer2}"></div>
<div th:insert="~{footer.html::span[class=‘content‘]}"></div>
<div th:insert="~{footer.html:://span[class=‘content‘][0]}"></div>
<div th:insert="~{footer.html:://span.content}"></div>
<div th:insert="~{footer.html::span%frag1}"></div>

<h4>含有变量的片断引用</h4>
<div th:insert="~{footer.html::welcome(‘小明‘)}"></div>

<h4>片断块引用</h4>
<table>
    <th:block th:each="number : ${#numbers.sequence(0,1)}">
        <tr>
            <td th:text="${number}"></td>
        </tr>
    </th:block>
</table>

<h4>删除模板</h4>
<table>
    <th:block th:each="number : ${#numbers.sequence(0,1)}">
        <tr th:remove="${number > 0} ? all : none">
            <td th:text="${number}"></td>
        </tr>
    </th:block>
</table>

</body>
</html>

IDEA运行后,浏览器访问:http://localhost:8080,查看网页源代码,结果如下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<h4>th:insert引用片断</h4>
引用指定模板的整个内容
<div><span>frag1</span>
<span>frag2</span>

<div id="footer1">footer1</div>

<div>
    <div id="footer2">footer2</div>
</div>

<div>
    <span class="content">footer3</span>
    <span class="content">footer4</span>
</div>

<div>
    <span>hello,null</span>
</div></div>
引用指定模板的片断
<div><span>frag1</span></div>
引用本页面的片断
<div><div>frag3</div></div>
<div><div>frag3</div></div>
<div>frag3</div>

<h4>th:replace、th:include与th:insert的区别</h4>
<span>frag1</span>
<div>frag1</div>

<h4>片断选择器的部分用法</h4>
<div><div id="footer1">footer1</div></div>
<div><div id="footer2">footer2</div></div>
<div><span class="content">footer3</span><span class="content">footer4</span></div>
<div><span class="content">footer3</span></div>
<div><span class="content">footer3</span><span class="content">footer4</span></div>
<div><span>frag1</span></div>

<h4>含有变量的片断引用</h4>
<div><div>
    <span>hello,小明</span>
</div></div>

<h4>片断块引用</h4>
<table>

        <tr>
            <td>0</td>
        </tr>

        <tr>
            <td>1</td>
        </tr>

</table>

<h4>删除模板</h4>
<table>

        <tr>
            <td>0</td>
        </tr>

</table>

</body>
</html>

原文地址:https://www.cnblogs.com/gdjlc/p/11706281.html

时间: 2024-10-01 04:06:35

Thymeleaf常用语法:模板片断的相关文章

Thymeleaf常用语法:表达式语法之运算符

Thymeleaf表达式语法之常量分为字符串常量.数字常量.布尔值常量.空值常量:运算符分为算术运算符.关系运算符.条件运算符.无操作符. 开发环境:IntelliJ IDEA 2019.2.2Spring Boot版本:2.1.8 新建一个名称为demo的Spring Boot项目. 1.pom.xml加入Thymeleaf依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactI

Thymeleaf常用语法:模板注释

Thymeleaf模板注释分为标准HTML/XML注释.解析层注释.原型注释三种. 一.注释说明 1.标准HTML/XML注释 直接通过浏览器打开,不显示,Thymeleaf模板引擎解析也不处理,但查看网页源代码,注释有在里面.语法: <!-- 内容 --> 浏览器界面不显示,查看浏览器网页源码有显示: 2.解析层注释 直接通过浏览器打开,会显示.但Thymeleaf模板引擎解析时会移除注释标签和里面内容.一般开发人员使用,减少对原型页面的破坏.语法: <!--/*--> 内容 &

Thymeleaf常用语法:自定义数据转换类

在模板文件中,可以使用“${{...}}”表达式进行数据转换,Thymeleaf会使用配置好的数据转换类,来实现转换.例如一个User对象,简单起见假设有姓名和年龄两个字段,对象的toString()方法拼接所有字段,使用“${user}”会调用对象的 toString()方法得到所有字段,如果在模板中只想得到姓名,可以使用自定义数据转换类实现. 在Sprint Boot中,实现过程:(1)先实现自定义的Formatter类,并根据具体业务实现数据转换逻辑:(2)将自定义的Formatter类注

Thymeleaf常用语法:数据延迟加载

在处理模板时,可以由模板逻辑决定是否加载数据,以提高性能.在Spring Boot控制器中设置数据时,使用LazyContextVariable可以实现这功能. 开发环境:IntelliJ IDEA 2019.2.2Spring Boot版本:2.1.8 新建一个名称为demo的Spring Boot项目. 1.pom.xml加入Thymeleaf依赖 <dependency> <groupId>org.springframework.boot</groupId> &l

Thymeleaf常用语法:使用星号表达式

在处理模板时,一般情况都是使用变量表达式 ${...} 来显示变量,还可以使用选定对象表达式 *{...},它也称为星号表达式.如果在模板中先选定了对象,则需要使用星号表达式.Thymeleaf的内置对象#object效果等同于星号表达式. 开发环境:IntelliJ IDEA 2019.2.2Spring Boot版本:2.1.8 新建一个名称为demo的Spring Boot项目. 1.pom.xml加入Thymeleaf依赖 <dependency> <groupId>org

Thymeleaf常用语法:HTML属性设置

使用Thymeleaf的属性来设置HTML属性.(1)使用th:attr属性可以修改原来HTML节点的属性:(2)th:attr属性可以同时设置多个属性:(3)每一个HTML属性都有对应的Thymeleaf属性,如th:attr="value='值'"可换为th:value="值"(4)HTML的type为checkbox.readonly.required.disabled的,Thymeleaf属性可写为th:checked="true/false&qu

Thymeleaf常用语法:条件判断 if、switch case

if语句条件判断使用th:if,它会判断表达式是否成立,表达式的结果支持boolean.number.character.String及其他类型.满足下面情况下,if语句成立:(1) 表达式的结果是数字且不是0(2) 表达式的结果是字符串且不是false.off.no.0(3) 表达式的结果是其他数据类型switch case语句(1) 类似Java的switch case语句:th:switch.th:case(2) 使用th:case="*"来表示默认值(3) 如果第一个th:ca

python MVC、MTV 框架介绍 Django 模板系统常用语法

Django 框架简介一.MVC框架和MTV框架1.MVC 全名Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分.优势: 耦合性低 重用性高 生命周期成本低结构:模型(Model) 与数据库相关 存取数据视图(View) 处理业务逻辑 展示信息控制器(Controller) 获取用户信息 给模型传递指令2.Django的MTV 全名Model Template View 借鉴了MVC框架的思想,也是分成三部分,来降低各个部分之间的耦合性.结构

ES6常用语法

ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准.因为当前版本的ES6是在2015年发布的,所以又称ECMAScript 2015. 也就是说,ES6就是ES2015. 虽然目前并不是所有浏览器都能兼容ES6全部特性,但越来越多的程序员在实际项目当中已经开始使用ES6了.所以就算你现在不打算使用ES6,但为了看懂别人的你也该懂点ES6的语法了... 在我们正式讲解ES6语法之前,我们得先了解下Babel. Babel Babel是一个广泛使用的ES6转码器,可以将