Thymeleaf th:include、th:replace使用

最近做到页面数据展示分页的功能,由于每个模块都需要分页,所以每个页面都需要将分页的页码选择内容重复的写N遍,如下所示:

在这里插入图片描述
重复的代码带来的就是Ctrl+C,Ctrl+V ,于是了解了一下thymeleaf的fragment加载语法以及th:include、th:replace的区别,得以解决。

首先在pom.xml引入thymeleaf的依赖

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

将上述的重复信息抽取出来存为pagination.html

<!DOCTYPE html SYSTEM "http://www.thymeleaf.org/dtd/xhtml1-strict-thymeleaf-4.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"><body><div class="panelBar" th:fragment="pagination"><!--以下为公共部分--><div class="pages"><span>显示</span><select class="combox" name="numPerPage" οnchange="navTabPageBreak({numPerPage:this.value})"><option value="1" th:selected="${pages.numPerPage}==1">1</option><option value="3" th:selected="${pages.numPerPage}==3">3</option><option value="5" th:selected="${pages.numPerPage}==5">5</option><option value="10" th:selected="${pages.numPerPage}==10">10</option><option value="100" th:selected="${pages.numPerPage}==100">100</option><option value="150" th:selected="${pages.numPerPage}==150">150</option><option value="200" th:selected="${pages.numPerPage}==200">200</option><option value="250" th:selected="${pages.numPerPage}==250">250</option></select><span id="fleeceRecordCounts" th:text="'共有'+${pages.totalCount}+''"></span></div><div id="fleece_page" class="pagination"  th:attr="targetType=${pages.targetType},totalCount=${pages.totalCount},numPerPage=${pages.numPerPage},pageNumShown=${pages.pageNumShown},currentPage=${pages.currentPage}"></div></div></body>
</html>

在其他页面进行引用该公共模块时如下:

<div class="panelBar" th:replace="pagination::pagination"></div>

注意:第一个pagination为上述公共部分的文件名,第二个pagination为th:fragment的值。这样便可以解决公共部分代码的抽取。

fragment加载语法如下:

templatename::selector:”::”前面是模板文件名,后面是选择器
::selector:只写选择器,这里指fragment名称,则加载本页面对应的fragment
templatename:只写模板文件名,则加载整个页面

  ================== fragment语法 ============================= <!--  语法说明  "::"前面是模板文件名,后面是选择器 --><div th:include="template/footer::copy"></div><!-- 只写选择器,这里指fragment名称,则加载本页面对应的fragment --><div th:include="::#thispage"></div><!-- 只写模板文件名,则加载整个页面 --><div th:include="template/footer"></div>
================= 加载块 ============================<span id="thispage">div in this page.
</span>

th:include 和 th:replace都是加载代码块内容,但是还是有所不同

th:include:加载模板的内容: 读取加载节点的内容(不含节点名称),替换div内容
th:replace:替换当前标签为模板中的标签,加载的节点会整个替换掉加载他的div
公共部分如下:

<!-- th:fragment 定义用于加载的块 -->
<span th:fragment="pagination"> 
the public pagination
</span>

引用时如下:

================= th:include 和 th:replace============================
<!-- 加载模板的内容: 读取加载节点的内容(不含节点名称),替换<div>的内容 -->
<div th:include="pagination::pagination">1</div>
<!-- 替换当前标签为模板中的标签: 加载的节点会整个替换掉加载他的<div>  -->
<div th:replace="pagination::pagination">2</div>

结果如下:

<!-- 加载模板的内容: 读取加载节点的内容(不含节点名称),替换<div>的内容 -->
<div> the public pagination</div>
<!-- 替换当前标签为模板中的标签: 加载的节点会整个替换掉加载他的<div>  -->
<span> the public pagination</span>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/250006.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(OS X) OpenCV架构x86_64的未定义符号:错误(OpenCV Undefined symbols for architecture x86_64: error)...

原地址&#xff1a;http://www.it1352.com/474798.html 错误提示如下&#xff1a; Undefined symbols for architecture x86_64:"cv::_InputArray::_InputArray(cv::Mat const&)", referenced from:_main in test-41a30e.o"cv::namedWindow(std::__1::basic…

【算法】大根堆

const swap (arr, i, j) > {const tmp arr[i];arr[i] arr[j];arr[j] tmp; } const heapInsert (arr , i) > { // 插入大根堆的插入算法while(arr[i] > arr[Math.floor((i - 1) / 2]) {swap(arr, i, Math.floor((i - 1) / 2);i Math.floor((i - 1) / 2; } } cons…

[CF1082E] Increasing Frequency

Description 给定一个长度为 \(n\) 的数列 \(a\) &#xff0c;你可以任意选择一个区间 \([l,r]\) &#xff0c;并给区间每个数加上一个整数 \(k\) &#xff0c;求这样一次操作之后数列中最多有多少个数等于 \(c\)。 \(n,c,a_i\leq 10^5\) Solution 假设当前选择区间的右端点为 …

Thymeleaf select 使用 和多select 级联选择

1.使用select 并且回绑数据; 页面&#xff1a; 状态&#xff1a; <select name"status" th:field"*{status}" id"idstatus" class"input-select" th:value"*{status}"> <option value"">--请选择-…

Switch语句的参数是什么类型的?

在Java5以前&#xff0c;switch(expr)中&#xff0c;exper只能是byte&#xff0c;short&#xff0c;char&#xff0c;int类型。 从Java5开始&#xff0c;java中引入了枚举类型&#xff0c;即enum类型。 从Java7开始&#xff0c;exper还可以是String类型。 switch关键字对于多数…

【LOJ】#2184. 「SDOI2015」星际战争

题解 直接二分然后建图跑网络流看看是否合法即可 就是源点向每个激光武器连一条二分到的时间激光武器每秒攻击值的边 每个激光武器向能攻击的装甲连一条边 每个装甲向汇点连一条装甲值的边 代码 #include <bits/stdc.h> #define fi first #define se second #define pii …

表达式符号

Thymeleaf对于变量的操作主要有$*#三种方式&#xff1a; 变量表达式&#xff1a; ${…}&#xff0c;是获取容器上下文变量的值.选择变量表达式&#xff1a; *{…}&#xff0c;获取指定的对象中的变量值。如果是单独的对象&#xff0c;则等价于${}。消息表达式&#xff1a; #{……

Java学习的快速入门:10行代码学JQuery

生活在快速发展时代的我们&#xff0c;如果不提速可能稍不留神就被时代淘汰了。快节奏的时代成就了快餐&#xff0c;亦成就了速成教育。尤其是身处互联网行业的我们&#xff0c;更新换代的速度更是迅速&#xff0c;快速掌握一门技术已经成为潮流趋势。怎样才能快速入门学习java…

项目管理

项目先后衔接的各个阶段的全体被称为项目管理流程。项目管理流程对于一个项目能否高效的执行起到事半功倍的效果。接下来我会利用36张的ppt&#xff08;当然了这里我只用部分图片展示要不然就太多图片了&#xff09;&#xff0c;介绍项目管理的整体流程。 1.项目管理的五大过程…

docker——三剑客之Docker Machine

Docker Machine是Docker官方三剑客项目之一&#xff0c;负责使用Docker的第一步&#xff0c;在多种平台上快速安装Docker环境。它支持多种平台&#xff0c;让用户在很短时间内搭建一套Docker主机集群。Machine项目是Docker官方的开源项目&#xff0c;负责实现对Docker主机本身进…

egret:什么是脏矩形

脏矩形是2D图形性能优化一个重要的概念。Egret2.5开始脏矩形完全可以由引擎自动计算&#xff0c;即大名鼎鼎的"自动脏矩形"。 简单说脏矩形&#xff0c;就是画面刷新时&#xff0c;产生变化而需要重绘的舞台局部区域。 什么叫脏&#xff0c;即什么情况下会弄脏&#…

软件项目管理(一)

首先软件项目管理&#xff0c;什么是项目&#xff1f;什么是软件项目&#xff1f; 项目是唯一的&#xff0c;临时的&#xff0c;即在一定的时间内完成。 具体定义&#xff1a;项目是为了创造一个唯一的产品或提供一个唯一的服务而进行的临时性的努力。 项目的特征&#xff1a; …

strace参数

strace参数 strace参数 -c 统计每一系统调用的所执行的时间,次数和出错的次数等. -d 输出strace关于标准错误的调试信息. -f 跟踪由fork调用所产生的子进程. -ff 如果提供-o filename,则所有进程的跟踪结果输出到相应的filename.pid中,pid是各进程的进程号. -F 尝试跟踪vfork调…

软件项目管理(二)

根据上次的路线图 从项目初始开始&#xff1a;包括项目确立和生存期 项目确立分成 项目立项、项目招投标、项目授权 项目立项&#xff1a;确定项目的目标、时间、资源、资金&#xff0c;关键在于得到项目发起人的认可 一个软件项目的立项开始于软件项目的启动&#xff0c;只…

centos6.5和centos7.5统一字符集为zh_CN.UTF-8解决系统和MySQL数据库乱码问题

linux的服务器需要做的操作 centos6.5下&#xff1a; 修改默认字符集为 zh_CN.UTF-8&#xff0c;如果没有中文语言包可能需要安装中文语言包支持 [rootmeinv01 ~]# yum groupinstall chinese-support [rootmeinv01 ~]# cat /etc/sysconfig/i18n #<修改此配置文件为如下 L…

软件项目管理(三)

上次讲完了项目初始部分&#xff0c;包括立项、招投标、授权 在进入第二部分&#xff0c;项目计划 前我们要先了解软件的需求以及任务的分解 软件需求管理 软件需求定义&#xff1a;用户对软件功能和性能的要求 软件需求管理过程&#xff1a;需求获取、需求分析、需求规格…

Winform-图片上传

1.界面上拖个.pictureBox(pictureBox1) //上传点击按钮 private void button1_Click(object sender, EventArgs e) { OpenFileDialog fileDialog new OpenFileDialog(); DialogResult result fileDialog.ShowDialog(); if (result DialogResult.OK) { this.pictureBox1.Imag…

moment.js 快捷查询

格式化日期 当前时间&#xff1a;moment().format(YYYY-MM-DD HH:mm:ss); //2014-09-24 23:36:09 今天是星期几&#xff1a;moment().format(d); //3 转换当前时间的Unix时间戳&#xff1a;moment().format(X); 相对时间 20120901相对当前日期是2年前moment("20120901&quo…

My97 DatePicker获取自定义日期的前一天

1.控件&#xff0c;获取第一个input中的时间&#xff0c;再将这个时间的前一天赋值给第二个input <input type"text" class"form-control input-sm" id"recordTime" style"width:145px" οnclick"WdatePicker({onpicked:chang…

Underscore.js 源码学习笔记(下)

上接 Underscore.js 源码学习笔记&#xff08;上&#xff09; 756 行开始 函数部分。 var executeBound function(sourceFunc, boundFunc, context, callingContext, args) {if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);var self …