Spring Boot:使用Thymeleaf布局方言的Thymeleaf模板装饰器

介绍

在所有Thymeleaf模板上重用页眉和页脚的问题经常在StackOverflow上提出。 在本文中,我将向您展示如何使用Thymeleaf布局方言来结构化模板,以在Spring Boot应用程序中实现更高的代码可重用性。

创建一个Spring Boot应用程序

让我们使用Spring Initializer创建一个具有所需依赖项的空项目。 我为空项目选择了以下内容:

在最喜欢的IDE中加载项目后,只需将thymeleafthymeleaf-layout-dialect版本更新为项目pom.xml

<thymeleaf-layout-dialect.version>2.2.2</thymeleaf-layout-dialect.version>
<thymeleaf.version>3.0.9.RELEASE</thymeleaf.version>

注意:我在这个示例中使用了Spring Boot 1.5.8.RELEASE。 一旦发布了稳定的2.0版本,我将相应地更新文章。

定义基本模板

如果使用的是Spring Boot,则无需为使用Thymeleaf和Thymeleaf布局方言进行任何配置。 自动配置支持将配置使用Thymeleaf模板所需的所有bean。

让我们在src\main\resources\templates位置创建base.html

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"xmlns:th="http://www.thymeleaf.org"	xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"><head><title layout:title-pattern="$CONTENT_TITLE - $LAYOUT_TITLE">Base</title><meta name="description" content=""/><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><link rel="stylesheet" type="text/css" href="https://bootswatch.com/4/cerulean/bootstrap.min.css" /></head><body><nav class="navbar navbar-light bg-light"><span class="navbar-brand mb-0 h1">Decorator Sample</span></nav><div class="container"><nav aria-label="breadcrumb" role="navigation"><ol class="breadcrumb"><th:block layout:fragment="breadcrumb"></th:block></ol></nav><div class="content"><div layout:fragment="page_content"></div></div></div><!-- /.container --><script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script><script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script><th:block layout:fragment="scripts"></th:block></body></html>

在上面的base.html您可以看到三个占位符:
- 面包屑
–内容 –内容所需的Javascript

其余Thymeleaf模板使用base.html装饰,并仅在以下三个部分中提供了三个占位符所需的数据。 页面的标题定义为layout:title-pattern="$CONTENT_TITLE - $LAYOUT_TITLE" ,这意味着,如果任何模板声明了My Page标记,则页面标题将变为Base - My Page

面包屑的内容

希望使用base.html装饰自己的任何页面都应在其HTML中声明,如下所示:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org" xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{base}">
</html>

layout:decorate属性采用基本模板相对于模板根文件夹的位置。 在我们的例子中,模板的根文件夹是src/main/resources/templates

通过在“:”之间的任意位置编写以下HTML,我们可以提供breadcrumb的内容。

<th:block layout:fragment="breadcrumb"><li class="breadcrumb-item">Page 1</li>
</th:block>

理想情况下,遵循在基本模板中定义layout:fragment的顺序将有助于保持页面之间内容顺序的一致性。 Thymeleaf及其布局方言生成的最终HTML是:

<nav aria-label="breadcrumb" role="navigation"><ol class="breadcrumb"><li class="breadcrumb-item">Page 1</li></ol>
</nav>

在相似的行上, page_content的内容将是:

<div layout:fragment="page_content" id="page_content"><h3>Page 1</h3><div class="alert alert-info" style="display: none;" id="js-content"></div><a th:href="@{/page2}">Go to page 2</a>
</div>

使用<th></th>将不需要使用虚拟标记来包装内容。 如果需要将内容包装在特定元素中,例如上面的<div> ,则必须用特定元素替换<th></th>

填充

很少有人会质疑scripts占位符scripts的必要性。 这使我们可以将与页面相关的javascript放在一个地方,而不污染基本模板中的所有javascript。

<th:block layout:fragment="scripts">
<script type="text/javascript">
$(function(){$("#js-content").html("From Javascript").slideToggle();
});
</script>
</th:block>

您甚至可以创建一个专用的.js文件,并将其链接到scripts部分:

<th:block layout:fragment="scripts">
<script type="text/javascript"src="@{/path/to/js/file}">
</script>
</th:block>

结论

在本文中,我们看到了如何使用Thymeleaf Layout Dialect用通用的基础模板来装饰模板。 当相关库位于其类路径上时,我们无需进行任何配置,因为Spring Boot通过自动配置来进行配置,在这种情况下,这是启动程序pom spring-boot-starter-thymeleaf带来的依赖关系

可以在这里找到可用的Spring Boot示例。

翻译自: https://www.javacodegeeks.com/2017/11/spring-boot-thymeleaf-template-decorator-using-thymeleaf-layout-dialect.html

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

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

相关文章

猫、狗与Java的多态

多态&#xff08;Polymorphism&#xff09;按字面的意思就是“多种状态”。在面向对象语言中&#xff0c;接口的多种不同的实现方式即为多态。引用Charlie Calverts对多态的描述——多态性是允许你将父对象设置成为一个或更多的他的子对象相等的技术&#xff0c;赋值之后&#…

solr crud_Spring Data Solr教程:CRUD(差不多)

solr crud在我的Spring Data Solr教程的上一部分中&#xff0c;我们学习了如何配置Spring Data Solr。 现在该迈出一步&#xff0c;了解我们如何管理Solr实例中存储的信息。 此博客文章描述了我们如何向Solr索引添加新文档&#xff0c;如何更新现有文档的信息以及如何从索引中删…

子类覆盖父类(Java)

要求&#xff1a;尝试创建一个父类&#xff0c;在父类中创建两个方法&#xff0c;在子类中覆盖第二个方法&#xff0c;再为子类创建一个对象&#xff0c;将它向上转型并调用这个方法 由于Java里面没有虚函数&#xff0c;所以它的多态是可以被继承的 public class tyu{public …

在Java中进行输入验证时用错误通知替换异常

在我以前的文章中&#xff0c;我写了一个输入验证设计&#xff0c;该设计取代了难以维护和测试的 if-else块。 但是&#xff0c;正如某些读者指出的那样&#xff0c;它有一个缺点–如果输入数据有多个验证错误&#xff0c;则用户将不得不多次提交请求以查找所有错误。 从可用性…

Java构建子类对象时的顺序

先看一个这么的程序&#xff1a; //------------------------------------------------------------------------// //程序目的&#xff0c;创建一个父类与子类&#xff0c;分别创建构造方法 public abstract class usecase1 {abstract void testAbstract();usecase1(){//&…

关于Java中serialUID的序列化的问题

在我们平时处理JAVA类中的问题时&#xff0c;有时会碰见类似这样的一行代码&#xff1a; private static final long serialVersionUID 1L;这就是程序的序列化ID 所谓序列化&#xff0c;用一句通俗的话来说&#xff0c;就是将对象冻结了放入硬盘的过程&#xff0c;举一个例子…

java 绑定微信号开发_Java开发中的常见危险信号

java 绑定微信号开发在开发&#xff0c;阅读&#xff0c;复审和维护成千上万行Java代码的几年中&#xff0c;我已经习惯于看到Java代码中的某些“ 危险信号 ”&#xff0c;这些信号通常&#xff08;但可能并非总是&#xff09;暗示着代码有问题。 我不是在谈论总是错误的做法&a…

使用绝对布局的方法创建一个登录密码验证的简易窗口

绝对布局是指直接采用坐标指定的方式在容器中创建窗口&#xff0c;这种方式比较灵活 采用这种方法创建布局的方式主要有以下几步&#xff1a; 使用Container.setLayout(null)的方式取消布局管理器使用Compon.setBounds()的方式来设置每个组件的大小 下面先上代码 import ja…

Neo4j:Cypher –属性值只能是原始类型或其数组

本周初&#xff0c;当我尝试在我认为要共享的节点上创建数组属性时&#xff0c;遇到了一个有趣的Cypher错误消息。 这是我写的Cypher查询&#xff1a; CREATE (:Person {id: [1, "mark", 2.0]})导致此错误&#xff1a; Neo.ClientError.Statement.TypeError Prope…

通信工程制图期末考试大纲

通信工程建设的三个阶段 初步设计、技术设计、施工图设计 通信工程建设的参与方 1、建设单位&#xff1a;是建设工程的投资人&#xff0c;也称“业主"。 2、勘察单位&#xff1a;是指已通过建设行政主管部门的资质审查&#xff0c;从事工程测量、水文地质和岩土工程等工…

锁相环锁相原理简洁版

锁相环锁相原理 1.没有参考信号输入的时候&#xff0c;环路滤波器的输出为一个固定值&#xff0c;这是的VCO按照其固定的频率进行震荡 2.当有参考信号输入时&#xff0c;Ur和Uv同时加到鉴相器来鉴相&#xff0c;如果鉴相器fr和fv差别不大的话&#xff0c;这两个电压做差&#…

古诺模型_再见了古诺。 你好Drools工作台。

古诺模型Drools 6.0发生了许多变化。 随着功能和功能的更改&#xff0c;我们对Guvnor github存储库进行了重组&#xff0c;以更好地反映我们的新架构。 历史上&#xff0c;Guvnor一直是Drools的Web应用程序。 它由Drools专用的编辑器&#xff0c;后端存储库和简化的资产管理系统…

八千字复习一下天线与电磁波

1. 空间坐标系 空间直角坐标系&#xff08;常用&#xff09;极坐标系平面直角坐标系距离矢量就是空间向量坐标单位矢量就是给距离矢量xyz底下分别除以模长梯度就是xyz求偏导&#xff0c;记得写 ex⃗\vec{e_{x}}ex​​/ey⃗\vec{e_{y}}ey​​/ez⃗\vec{e_{z}}ez​​,最后方程左…

Apache Fluo:填充Google搜索索引的Percolator的实现

Apache Fluo是Apache Accumulo [3]的Percolator [2]&#xff08;填充Google的搜索索引&#xff09;的开源实现 。 使用Fluo&#xff0c;用户可以将新数据连续地合并到大型现有数据集中&#xff0c;而无需重新处理所有数据。 与批处理和流传输框架不同&#xff0c;Fluo提供了低得…

最通俗的语言讲解卷积码、码树图、状态图以及维特比译码

什么是卷积码&#xff1f; 卷积码是由伊利亚斯发明的一种非分组码&#xff0c;它更加倾向于纠错&#xff0c;对于实际的性能优于分组码&#xff0c;运算较为简单。 将卷积码记为(n,k,N),码率定义为k/n n是n个比特 k是k个信息位 N是N个信息段 卷积码编码器 组成&#xff1a…

通信系统的同步技术归纳

载波同步&#xff1a;在相干解调时&#xff0c;接收端的解调器要产生一个与接收到的载波同频同相的相干载波位同步&#xff1a;接收端产生一个与接收信号符号速率相同&#xff0c;相位与最佳判决时刻一致的定时脉冲序列信号群同步&#xff1a;群同步是指在接收端产生与“字、句…

c语言 在txt文件中搜索关键词_网络推广外包—网络推广外包如何在搜索引擎中体现关键词优化效果...

在当下的互联网时代中&#xff0c;没有企业愿意远离这种流量获取快、用户需求大、宣传推广能力见效快的搜索引擎&#xff0c;况且通过互联网的帮助下&#xff0c;企业网站能够通过搜索引擎进行关键词优化后获取更多的转化率&#xff0c;增加企业交易额度的提升&#xff0c;谁又…

Spring JPA数据+Hibernate+ MySQL + Maven

在Spring MVC的帮助下开发Web应用程序意味着要创建几个逻辑架构层。 层之一是DAO&#xff08;存储库&#xff09;层。 它负责与数据库进行通信。 如果您至少开发了DAO层一次&#xff0c;则应该知道它涉及许多样板代码。 Spring Data本身就是与DAO相关的日常工作的一部分。 在帖…

数字通信系统中的均衡技术

均衡技术是为了消除码间串扰的影响 自适应均衡器 可以自动调整抽头滤波系数的均衡器。包含两个工作模式&#xff0c;训练模式和跟踪模式&#xff1b; 训练模式&#xff1a;发射机发射一个已知的定长的序列&#xff0c;以便接收机处的均衡器可以做出正确的设置跟踪模式&#…

eclipse中birt插件使用_waves教学:如何使用通道条插件在DAW中创建模拟工作流

这篇Waves小文章将帮助你了解通道条插件如何来加快混音工作流程&#xff0c;同时还能在DAW中添加令人愉悦的模拟调音台染色——以及它们如何以前所未有的灵活性适应数字新时代。什么是通道条&#xff1f;第一次看到一台老式模拟调音台时&#xff0c;人们常常因为按键、旋钮和推…