thymeleaf 引入html公共模板代码
时间: 2023-11-15 17:30:08 浏览: 165
好的,我可以为您讲解如何在thymeleaf中引入HTML公共模板代码。一般来说,我们可以将公共的HTML代码放置在一个单独的HTML文件中,然后使用thymeleaf的“include”指令将其引入到其他HTML文件中。具体的步骤如下:
1. 创建一个包含公共HTML代码的HTML文件,例如“common.html”。
2. 在其他HTML文件中,使用如下thymeleaf指令将“common.html”文件引入:
`<!--/*@thymesVar id="common" type="text/html"*/-->`
`<!--/*@thymesImport "../common.html"*/-->`
3. 在需要使用公共HTML代码的位置,使用如下thymeleaf指令引用:
`<div th:insert="${common} :: content"></div>`
通过以上步骤,您就可以在thymeleaf中引入HTML公共模板代码了。
相关问题
Thymeleaf 好看的模板配置
<think>嗯,用户想要关于Thymeleaf模板配置的最佳实践或美观设计示例。首先,我需要回忆一下Thymeleaf的基本配置和常见的最佳实践。根据之前的引用,比如引用[2]提到Spring Boot整合Thymeleaf时的默认配置,比如模板位置在resources/templates,后缀是.html。然后引用[3]提到了使用Java8Time扩展来格式化日期,还有如何在配置文件中设置额外的方言。此外,引用[4]提到在非Spring MVC环境下如何手动调用模板引擎,这可能也是相关的,但用户可能更关注的是配置和设计方面的最佳实践。
首先,用户可能需要知道如何优化Thymeleaf的配置,比如开发环境关闭缓存,这样修改模板后不需要重启应用。这在引用[1]和引用[3]中都有提到,比如spring.thymeleaf.cache=false。然后,关于美观设计,可能需要包括布局模板的使用,比如使用Thymeleaf的布局方言来避免重复代码,或者使用片段表达式来复用部分页面。
另外,用户可能关心如何组织模板结构,比如将公共部分如页眉、页脚、导航栏抽取成片段,这样各页面可以继承或引用这些片段,保持一致性。引用[3]中提到的日期格式化也是一个美观的考虑点,使用Java8Time扩展可以方便地在模板中处理日期,无需后端处理,这样前端展示会更整洁。
可能还需要提到静态资源的处理,比如正确引用CSS和JavaScript文件,使用Thymeleaf的链接表达式@{...}来确保路径正确。同时,使用语义化的HTML5标签,结合Thymeleaf的属性,保持代码的可读性。
此外,自定义配置方面,比如修改前缀和后缀,虽然默认已经不错,但如果有特殊需求可以调整。还有,消息外部化,即使用消息文件来管理文本内容,方便国际化和维护,这也是最佳实践的一部分。
最后,可能需要给出一个示例配置,展示如何整合这些最佳实践,比如在application.yml中设置缓存、启用模板、配置方言等,以及一个简单的模板示例,展示布局和片段的使用。同时,生成相关问题,帮助用户深入理解相关主题,比如如何实现国际化,如何处理动态数据等。</think>### Thymeleaf 模板配置最佳实践与美观设计示例
#### 一、核心配置优化
1. **开发环境配置**
在`application.yml`中关闭缓存并启用模板引擎,提升开发效率:
```yaml
spring:
thymeleaf:
cache: false # 开发环境关闭缓存
enabled: true # 启用Thymeleaf
prefix: classpath:/templates/ # 模板路径
suffix: .html # 文件后缀
mode: HTML5 # 使用HTML5标准
```
通过`@ConfigurationProperties`绑定配置,支持灵活修改[^2]。
2. **集成扩展功能**
添加`Thymeleaf Extras Java8Time`依赖,简化日期格式化:
```yaml
spring:
thymeleaf:
additional-dialects: org.thymeleaf.extras.java8time.dialect.Java8TimeDialect
```
模板中直接使用`<span th:text="${#temporals.format(date, 'yyyy-MM-dd')}"></span>`,避免后端逻辑冗余[^3]。
---
#### 二、美观设计与代码规范
1. **布局模板化**
**定义公共布局文件** `layouts/base.html`:
```html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org" xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout">
<head>
<title layout:title-pattern="$CONTENT_TITLE - $LAYOUT_TITLE">默认标题</title>
<link th:href="@{/css/main.css}" rel="stylesheet">
</head>
<body>
<header th:replace="~{fragments/header :: header}"></header>
<main layout:fragment="content"></main>
<footer th:replace="~{fragments/footer :: footer}"></footer>
</body>
</html>
```
**子页面继承布局**:
```html
<html layout:decorate="~{layouts/base}">
<head>
<title>子页面标题</title>
</head>
<body>
<section layout:fragment="content">
<h1>页面内容</h1>
</section>
</body>
</html>
```
2. **组件模块化**
**抽取可复用片段** `fragments/header.html`:
```html
<header th:fragment="header">
<nav>
<a th:href="@{/}">首页</a>
<a th:href="@{/about}">关于</a>
</nav>
</header>
```
**动态引入片段**:
```html
<div th:replace="~{fragments/header :: header}"></div>
```
3. **样式与脚本管理**
- **版本化静态资源**:
```html
<link th:href="@{/css/app.css?v=${@environment.getProperty('app.version')}}">
```
- **按需加载脚本**:
```html
<script th:src="@{/js/dashboard.js}" defer></script>
```
---
#### 三、高级实践
1. **消息外部化**
在`messages.properties`中定义文本:
```properties
welcome.message=欢迎使用系统,当前时间:<span th:text="${#temporals.format(#dates.createNow(), 'yyyy-MM-dd HH:mm')}"></span>
```
模板中引用:
```html
<h1 th:text="#{welcome.message}"></h1>
```
2. **条件渲染优化**
```html
<div th:classappend="${user.isAdmin} ? 'admin-badge' : ''" th:if="${user.active}">
[[${user.name}]]
</div>
```
---
#### 四、完整配置示例
```yaml
# application.yml
spring:
thymeleaf:
cache: false
prefix: classpath:/templates/
suffix: .html
additional-dialects:
- org.thymeleaf.extras.java8time.dialect.Java8TimeDialect
check-template-location: true
enabled: true
mode: HTML
encoding: UTF-8
servlet:
content-type: text/html
```
---
Thymeleaf 模板布局
### Thymeleaf 中实现页面模板布局的方法
#### 使用 `th:insert` 和 `th:replace`
为了在 Thymeleaf 中实现页面模板布局,可以利用 `th:insert` 或者 `th:replace` 属性来引入其他 HTML 片段。例如,在定义了一个名为 `footer.html` 的文件之后:
```html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<body>
<div th:fragment="copyright">
© 2020 The Thymeleaf footer
</div>
</body>
</html>
```
可以在另一个页面中通过下面的方式插入这段版权信息[^2]。
对于主页面 `layout.html` 来说,则可以通过如下方式引用上述片段:
```html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8"/>
<title>页面布局</title>
</head>
<body>
<h1>Thymeleaf 模板引擎</h1>
<h3>页面布局</h3>
<!-- 插入来自 footer.html 文件中的 copyright 片段 -->
<div th:insert="~{footer::copyright}"></div>
</body>
</html>
```
这里使用了 `th:insert` 并指定了路径以及要提取的具体部分 `~{footer::copyright}` 。这使得可以从指定的位置加载并嵌入相应的HTML结构到当前文档内[^4]。
#### 利用 `th:include` 进行简化操作
除了 `th:insert`, 还有更简洁的选择——即 `th:include`. 它会把目标区域的内容复制过来而不会保留外部容器标签。如果只需要获取特定的部分而不想要额外的包裹层时非常有用。
#### 应用 `th:replace` 替换整个元素
当希望完全替换某个DOM节点而不是仅仅向其中添加子节点的时候可以选择 `th:replace` . 此属性将会用所指向的内容彻底替代掉应用此特性的原始标记及其内部的所有东西。
#### 配合 `th:fragment` 创建可重用组件
为了让某些常用UI模块能够被多个地方调用共享,应该考虑将这些公共部分单独拆分出来作为独立的小型模板,并给定唯一的 fragment 名字以便于识别和访问。这样做的好处是可以提高代码复用率并且便于维护更新[^3].
阅读全文
相关推荐















