文章目录

  • Spring Boot - Thymeleaf模板简介以及集成
    • 1.什么是Thymeleaf?
    • 2.标准表达式
      • 2.1 变量表达式
      • 2.2 选择表达式/星号表达式
      • 2.3 URL表达式
      • 2.4 消息表达式/资源表达式
        • messages.properties
        • messages_zh_CN.properties
        • messages_en_US.properties
        • application.properties
    • 3.常用标签属性
      • 3.1 常用标签属性使用
        • ThymeleafController.java
        • th:each遍历
        • th:switch/th:case 多路开关
      • 3.2 常用标签属性优先级
    • 4.表达式支持语法
      • 4.1 字面量(literals)
      • 4.2 文本操作(Text operations)
      • 4.3 算术运算(Arithmetic operations)
      • 4.4 布尔操作(Boolean operations)
      • 4.5 条件运算符(Conditional operators)
      • 4.6 表达式上下文内置对象
      • 4.7 表达式功能内置对象
    • 5.集成Thymeleaf
      • 5.1 添加pom依赖
        • pom.xml
      • 5.2 配置文件
        • application
      • 5.3 使用
        • ThymeleafController.java
        • index.html

Spring Boot - Thymeleaf模板简介以及集成

 正所谓工欲善其事必先利其器,这里我们就来先大概了解一下Thymeleaf的一些特性和使用。

1.什么是Thymeleaf?

Thymeleaf官网
Thymeleaf使用官方文档
Spring+Thymeleaf

 Thymeleaf是一个流行的模板引擎,该模板引擎采用Java语言开发。模板引擎只是一个技术名词,是跨领域跨平台的概念,在Java语言体系下有模板引擎,在C#、PHP等语言体系下也有各自的模板引擎。Thymeleaf是一个和Freemarker、Velocity、Beetl类似的模板引擎,在过去的Java Web开发中,我们往往会选择使用Jsp去完成页面的动态渲染,但是Thymeleaf的出现使它完全替代了JSP。新版的Spring中更推荐使用Thymeleaf去用作前端模版引擎,并且Spring Boot对Thymeleaf也提供了很好的集成。

 既然官方也更加推荐使用Thymeleaf作为模板引擎,那必然是存在与其他模板引擎相比较的优点:

  1. Thymeleaf 对网络环境不存在严格的要求,既能用于Web环境下,也能用于非Web环境下。在非Web环境下,他能直接显示模板上的静态数据;在Web环境下,它能像Jsp一样从后台接收数据并替换掉模板上的静态数据。它是基于HTML的,以HTML标签为载体,Thymeleaf要寄托在HTML标签下实现
  2. Thymeleaf 开箱即用的特性,可以处理六种模板,每种模板都称为模板模式:两种标记模板模式(HTML和XML),三种文本模板模式(TEXT,JAVASCRIPT和CSS)和一种无操作模板模式(RAW)。它提供自身标准和spring标准两种方言,可以直接套用模板实现JSTL、 OGNL表达式效果。既可以保留原有JSTL以及标签的作用,同时又可以扩展和创建自定义的方言。

2.标准表达式

 每种模板引擎都有自己的表达式,Thymeleaf标准表达式主要有四种:

  1. 变量表达式
  2. 第选择或星号表达式
  3. URL表达式
  4. 消息表达式/资源表达式

 下面先来介绍这些标准表达式,里面会涉及一些Thymeleaf的常用标签属性,后面会介绍。

2.1 变量表达式

 语法:${...}
 变量表达式即OGNL表达式或Spring EL表达式,变量表达式用于访问容器(例如:tomcat)上下环境中的变量,功能与JSTL中${}相同,Thymeleaf中的变量表达式用${变量名}方式获取数据。例如:${user.name}

<p><span th:text="${user.name}">Jack</span><span th:text="${user.age}">18</span>
</p>
2.2 选择表达式/星号表达式

 语法:*{...}
 选择表达式也叫星号表达式,可使用th:object属性绑定对象之后使用,实际绑定一个选择的对象代替上下文变量容器。选择表达式操作的是选定的对象,而不是整个环境变量映射。

<!-- 选择表达式:先使用th:object绑定对象 后用*可直接获取对象属性-->
<p th:object="${user}"><span th:text="*{name}">Jack</span><span th:text="*{age}">18</span>
</p>

 选择表达式可以和变量表达式可以混合使用,并且只要没有选定对象,选择表达式*{}与变量表达式${}的语法作用是完全一样的。`

<!-- 标准变量表达式和选择表达式可以混用-->
<p th:object="${user}"><span th:text="${user.name}">Jack</span><span th:text="*{age}">18</span>
</p>
<!--不使用th:object绑定对象,也可直接使用*{}获取属性-->
<p><span th:text="*{user.name}">Jack</span><span th:text="*{user.age}">18</span>
</p>
2.3 URL表达式

 语法:@{...}
 URL表达式可用于<script src="..."> <link href="..."> <a href="...">等,URL表达式指的是把上下文信息添加到URL中,这个过程通常称为URL重写。
这里我们可以通过很多种方式去设置参数,例如下面示例:

  1. 第一种是通过我们常规的字符串拼接,这里用单引号将常量标明通过字符串拼接的方式动态重写URL。
  2. 第二种通过括号()将参数以及参数值填充至地址后面
  3. 第三种用||(高级文本连接)将所有内容包含起来,在里面可以直接使用以上标准表达式达到拼接效果

 第一种方式和以前使用JSP的时候可能更加接近,这里第二种和第三种更加增强了动态URL的可读性并且减少了拼接的复杂度,并且这里也可以指定相对路径或者绝对路径。

  <!-- http://localhost:8080/user?name=jackson$age=20 --><a href="https://blog.csdn.net" th:href="@{'http://localhost:8080/user?name='+${user.name}+'$age='+${user.age}}">点击一下</a><a href="https://blog.csdn.net" th:href="@{'http://localhost:8080/user(name=${user.name},age=${user.age})'}">点击一下</a><!-- http://localhost:8080/user?name=jackson$age=20 --><a href="https://blog.csdn.ne" th:href="@{|http://localhost:8080/user?name=${user.name}$age=${user.age}|}">点击一下</a><!-- user?name=jackson$age=20 --><a href="https://blog.csdn.ne" th:href="@{'user?name='+${user.name}+'$age='+${user.age}}">点击一下(相对页面)</a><!-- /springboot-thymeleaf/user?name=jackson$age=20 --><a href="https://blog.csdn.ne" th:href="@{'/user?name='+${user.name}+'$age='+${user.age}}">点击一下(相对项目)</a>
2.4 消息表达式/资源表达式

 语法:#{...}
 消息表达式也叫资源表达式,通常用于显示页面静态文本,可以将静态文本维护在properties配置文件用Key索引Value方便维护,做国际化等功能。

 若使用消息表达式做国际化功能,我们首先需要不同的配置文件,这里我们在statics/messages下建三个配置文件

messages.properties
main.msg=默认消息
second.msg=独有信息
messages_zh_CN.properties
main.msg=消息表达式
messages_en_US.properties
main.msg=msg expression

 由于我们项目是Spring Boot构建项目,所以需要在application配置文件中配置扫描国际化配置文件路径

application.properties
#国际化配置文件
spring.messages.basename=statics/messages/messages

 接下来我们就可以使用#{}去获取数据

<!-- 信息表达式 -->
<p><span th:text="#{main.msg}">example</span><span th:text="#{second.msg}">example</span>
</p>

 很简单我们就可以实现国家化的功能,这里大家需要注意的是关于国际化的配置文件存在优先级别的,假如存在以下三个配置文件,那么下面文件会从上往下为高至低的优先级去匹配。
 messages_zh_CN.properties
 messages_zh.properties
 messages.properties

3.常用标签属性

 在之前的介绍中,我们已经接触到了一些Thymeleaf的常见标签属性,那么我们来看看Thymeleaf还给我们提供了哪些功能的标签属性。

标签 功能 示例
th:id id声明,替换id <input th:id="'user' + ${user.id}"/>
th:text 文本替换 <p th:text="${msg}">description</p> <td th:text="7+8">2019</td>
th:utext 支持html文本替换 <p th:utext="${htmlcontent}">html</p>
th:object 替换对象,用于数据对象绑定 <div th:object="${user}">
th:value 属性赋值 <input th:value="${user.name}" />
th:with 变量赋值运算 <div th:with="flag=${user.count}%2==0"></div>
th:style 设置样式 <div th:style="'display:none;'">style</div>
th:onclick 点击事件 th:onclick="'myOnclick()'"
th:if 判断条件 <span th:if="${display} eq true" th:text="${display}">true</span> <div th:if="${user} != null and ${check} != null">show</div>
th:unless 与th:if判断相反 <span th:unless="${display} eq true" th:text="${display}">false</span>
th:each 对象遍历,功能类似jstl中的<c:forEach>标签 <p th:each="user,iterStat:${userList}">
th:href 超链接,类似<a>标签的href 属性 <a th:href="@{/login}" th:unless=${session.user != null}>Login</a> />
th:switch 多路选择,配合th:case使用 <div th:switch="${user.sex}">
th:case th:switch的分支 <span th:case="1">男</span><span th:case="2">女</span><span th:case="*">未知</span>
th:fragment 布局标签,声明该属性的div为模板片段,常用与头文件、页尾文件的引入。常与th:includeth:replace组合使用。 <div th: fragment="copy" >fragment</div> <div th: include=" /templates/footer : : copy" ></div>
th:include 布局标签,替换内容到引入的文件 <head th:include="layout :: htmlhead" th:with="title='include'"></head> />
th:replace 布局标签,替换整个标签到引入的文件 <div th:replace="fragments/header :: title"></div>
th:selected 选择框选中 th:selected="(${user.id} == ${target.id})"
th:src 用于外部资源引入,类似于<script>标签的src属性 <img class="img-responsive" alt="App Logo" th:src="@{/img/logo.png}" />
th:inline 内联文本、内联脚本 <div th:inline="text"> [[${user.name}]]</div> <script th:inline="javascript" type="text/javascript">console.log([[${user.name}]]);</script>
th:action 定义后台控制器路径,类似<form>标签的action属性 <form action="subscribe.html" th:action="@{/subscribe}">
th:remove 删除某个属性 1.all:删除包含标签和所有的孩子。2.body:不包含标记删除,但删除其所有的孩子。3.tag:包含标记的删除,但不删除它的孩子。4.all-but-first:删除所有包含标签的孩子,除了第一个。5.none:什么也不做。这个值是有用的动态评估。 <tr th:remove="all">
th:attr 设置标签属性,多个属性可以用逗号分隔 <span th:text="${user.name}" th:attr="age=${user.age},sex=${user.sex}">
3.1 常用标签属性使用
ThymeleafController.java
@RequestMapping(value = "/index")public String index(Model model){model.addAttribute("msg","thymeleaf controller...");model.addAttribute("user",new User("jackson",20));ArrayList<User> users = new ArrayList<>();HashMap<Integer, Object> userMap = new HashMap<>();for (int i = 0;i < 10;i ++){User user = new User("jackson" + i, (int) (Math.random() * 10) + i);users.add(user);userMap.put(i,user);}model.addAttribute("userList",users);model.addAttribute("userMap",userMap);model.addAttribute("display",true);model.addAttribute("sex",1);return "index";}

 在我们使用Thymeleaf模板时,遍历是我们开发中经常遇见的,在以前使用JSP时,我们使用c:foreach标签可以轻松完成数组集合的遍历,这里也一样,Thymeleaf提供了th:each标签属性很方便地也能达到遍历的效果。

th:each遍历

 对于array以及list数组,Thymeleaf提供了很多遍历帮助变量:

  1. index:当前迭代对象index(0开始)
  2. count:当前迭代对象个数(1开始)
  3. size:被迭代对象大小
  4. current:当前迭代变量
  5. even/odd:布尔值,当前循环是否奇数/偶数
  6. first:布尔值,当前循环是否第一个
  7. last:布尔值,当前循环是否最后一个
    注意:循环体信息iterStat若不定义,则默认采用迭代变量+Stat,这里为userStat(若iterStat未定义)
<p th:each="user,iterStat:${userList}"><span th:text="${user.name}">杰克逊</span><span th:text="${user.age}">18</span><span th:text="${iterStat.index}"></span><span th:text="${iterStat.size}"></span><span th:text="${iterStat.first}"></span>
</p>
<!-- Map类型遍历 -->
<p th:each="map:${userMap}"><span th:text="${map.key}">key</span><span th:text="${map.value}">value</span><span th:text="${map.value.name}">杰克逊</span><span th:text="${map.value.age}">18</span>
</p>
th:switch/th:case 多路开关
    <span th:switch="${user.sex}"><span th:case="1">男</span><span th:case="2">女</span><span th:case="*">未知</span></span>
3.2 常用标签属性优先级

 由于一个标签中可以添加多个属性,那么当然会有一个优先级的问题,这里我们可以看到官方文档给我们列举出了各个标签属性的优先级,大家组合使用的时候需要注意

4.表达式支持语法

 为了更好地使用Thymeleaf模板,我们对其支持的语法进行了解可以更加提升我们开发的效率,所有以下特征都可以被组合嵌套使用,这里我们看一下支持的语法有哪些。

4.1 字面量(literals)

 文本字面量:用单引号’ '包围的字符串为文本字面量 例: 'api/user', 'hello world'
 数字字面量: 0, 88.8
 布尔字面量: true, false
 空字面量: null

4.2 文本操作(Text operations)

 字符串连接: 即字面量拼接,用 + 连接多个字面量 例:'当前在线用户:'+${user.online}+'位'

 文本替换:使用 | 减少字符串拼接,更为优雅 例:|当前在线用户${user.online}位|

4.3 算术运算(Arithmetic operations)

 二元运算符: +, -, *, /, %
 三元运算符:?: 例:<span th:if="${sex} eq 1?'男':'女'">未知</span>
 关系比较:>, <, >=, <= (gt, lt, ge, le)
 等值运算符: ==, != (eq, ne)

4.4 布尔操作(Boolean operations)

 一元运算符: !, not
 二元运算符: and, or

4.5 条件运算符(Conditional operators)

 If-then: (if) ? (then)
 If-then-else: (if) ? (then) : (else)

4.6 表达式上下文内置对象

 在使用Thymeleaf模板时我们仍能通过表达式去获取某些上下文内置对象,保持更高的灵活性。
 #ctx:上下文对象。
 #vars: 上下文变量。
 #locale:上下文区域设置。
 #request: HttpServletRequest对象(`2.x版本使用#httpServletRequest)。
 #response: HttpServletResponse对象(2.x版本使用#httpServletResponse)。
 #session: HttpSession对象(2.x版本使用#httpSession)。
 #servletContext: ServletContext对象。
 以上内置对象我们可以在Thymeleaf引擎模板中直接使用:

<span th:text="${#request.getContextPath()}"></span>
4.7 表达式功能内置对象

 除了上面的上下文内置对象,Thymeleaf模板引擎也提供了一组功能性的内置对象,例如集合、时间、数值等处理都可以用这些对象轻松完成,也是通过#调用,这里我们简单介绍几个,完整的对象和使用各位可以查看官方文档Thymeleaf官方文档-表达式功能性内置对象

  1. #dates:日期处理对象,使用和java.util.Date对象一致 例: <span th:text="${#dates.format('2018/12/28','yyyy-MM-dd HH:mm:ss')}">时间功能对象</span>
  2. #numbers:格式化数字的功能性内置对象
  3. #strings:字符串处理功能性内置对象 例: ${#strings.contains('jackson','on')}
    所有的这里不一一列出,各位可以通过上面连接去官方文档里面查看,更加详细

5.集成Thymeleaf

 首先对于Spring Boot的Web项目有几点是需要我们知道的:

  1. 静态资源(css、js、图片等)默认放在resources/static下面。如果要修改默认存放目录,可以通过设置属性 spring.mvc.static-path-pattern来实现。
  2. 模板文件默认放在 templates目录下,Spring boot支持使用模板来开发web应用,支持的模板类型包括
    FreeMarker、Groovy、Thymeleaf、Mustache

5.1 添加pom依赖
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.1.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.springboot</groupId><artifactId>springboot-thymeleaf</artifactId><version>0.0.1-SNAPSHOT</version><name>springboot-thymeleaf</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version></properties><dependencies><!-- springboot web起步依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- spring boot 整合thymeleaf起步依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><!-- 取消标签严格验证 设置spring.thymeleaf.mode=LEGAYHTML5需要引入以下依赖--><!--   <dependency><groupId>net.sourceforge.nekohtml</groupId><artifactId>nekohtml</artifactId></dependency><dependency><groupId>org.unbescape</groupId><artifactId>unbescape</artifactId><version>1.1.5.RELEASE</version></dependency>--></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins><resources><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes></resource><resource><directory>src/main/resources</directory><includes><include>**/*.*</include></includes></resource><resource><directory>src/main/webapp</directory><targetPath>META-INF/resources</targetPath><includes><include>**/*.*</include></includes></resource></resources></build></project>
5.2 配置文件

 这里我们不需要配置什么过多的属性就可以直接去使用Thymeleaf模板引擎,特别方便

application
# 开发阶段,建议关闭thymeleaf缓存
spring.thymeleaf.cache=false
# 使用遗留的html5 去除html标签严格验证
# spring.thymeleaf.mode=LEGACYHTML5server.servlet.context-path=/springboot-thymeleaf
5.3 使用
ThymeleafController.java
package com.springboot.controller;import com.springboot.repository.entity.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;import java.util.ArrayList;
import java.util.HashMap;/*** @author hzk* @date 2018/12/27*/
@Controller
public class ThymeleafController {@RequestMapping(value = "/index")public String index(Model model){model.addAttribute("msg","thymeleaf controller...");model.addAttribute("user",new User("jackson",20));ArrayList<User> users = new ArrayList<>();HashMap<Integer, Object> userMap = new HashMap<>();for (int i = 0;i < 10;i ++){User user = new User("jackson" + i, (int) (Math.random() * 10) + i);users.add(user);userMap.put(i,user);}model.addAttribute("userList",users);model.addAttribute("userMap",userMap);model.addAttribute("display",true);model.addAttribute("sex",1);return "index";}}

 我们可以通过上面controller填充好数据然后转发到index.html模板页面,所以我们需要在templates目录下放置index.html文件,这里只需要将<html lang="en" xmlns:th="http://www.thymeleaf.org">加上即可使用Thymeleaf。

index.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org"><head><meta charset="UTF-8"><title>index</title>
</head>
<body>
<!-- 标准变量表达式 -->
<p th:text="${msg}">index....
</p>
<p><span th:text="${user.name}">杰克逊</span><span th:text="${user.age}">18</span>
</p>
<!-- 选择变量表达式:先使用th:object绑定对象 后用*可直接获取对象属性-->
<p th:object="${user}"><span th:text="*{name}">杰克逊a</span><span th:text="*{age}">18a</span>
</p><!-- 标准变量表达式和选择变量表达式可以混用--><p th:object="${user}"><span th:text="${user.name}">杰克逊b</span><span th:text="*{age}">18b</span></p><!--不使用th:object绑定对象,也可直接使用*{}获取属性--><p><span th:text="*{user.name}">杰克逊c</span><span th:text="*{user.age}">18c</span></p>
<!-- 信息表达式 -->
<p><span th:text="#{main.msg}">example</span><span th:text="#{second.msg}">example</span>
</p>
<!-- url表达式 -->
<p><!-- http://localhost:8080/user?name=jackson$age=20 --><a href="http://www.baidu.com" th:href="@{'http://localhost:8080/user?name='+${user.name}+'$age='+${user.age}}">点击一下</a><a href="http://www.baidu.com" th:href="@{'http://localhost:8080/user(name=${user.name},age=${user.age})'}">点击一下(设置参数)</a><!-- http://localhost:8080/user?name=jackson$age=20 --><a href="http://www.baidu.com" th:href="@{|http://localhost:8080/user?name=${user.name}$age=${user.age}|}">点击一下</a><!-- user?name=jackson$age=20 --><a href="http://www.baidu.com" th:href="@{'user?name='+${user.name}+'$age='+${user.age}}">点击一下(相对页面)</a><!-- /springboot-thymeleaf/user?name=jackson$age=20 --><a href="http://www.baidu.com" th:href="@{'/user?name='+${user.name}+'$age='+${user.age}}">点击一下(相对项目)</a>
</p>
<!-- list/数组 th:each 遍历属性index:当前迭代对象index(0开始)count:当前迭代对象个数(1开始)size:被迭代对象大小current:当前迭代变量even/odd:布尔值,当前循环是否奇数/偶数first:布尔值,当前循环是否第一个last:布尔值,当前循环是否最后一个注意:循环体信息iterStat若不定义,则默认采用迭代变量+Stat,这里为userStat-->
<p th:each="user,iterStat:${userList}"><span th:text="${user.name}">杰克逊</span><span th:text="${user.age}">18</span><span th:text="${iterStat.index}"></span><span th:text="${iterStat.size}"></span><span th:text="${iterStat.first}"></span>
</p>
<!-- Map类型遍历 -->
<p th:each="map:${userMap}"><span th:text="${map.key}">key</span><span th:text="${map.value}">value</span><span th:text="${map.value.name}">杰克逊</span><span th:text="${map.value.age}">18</span>
</p>
<!-- 条件判断 == / eq 字符串需要''th:unless 与之相反 -->
<p><span th:if="${display} eq true" th:text="${display}">th:if</span><span th:unless="${display} eq true" th:text="${display}">th:unless</span><span th:switch="${sex}"><span th:case="1">1</span><span th:case="2">2</span><span th:case="*">未知</span></span>
</p>
<!-- th:attr 设置标签属性 -->
<p><span th:text="${user.name}" th:attr="age=${user.age},sex=${user.sex}"></span>
</p>
<!-- th:style设置样式 -->
<div th:style="'display:none;'">ttt
</div>
<!-- 内联文本  用内联表达式可以获取属性
<div th:text="${user.name}">jack
</div> 与此效果一致-->
<div th:inline="text">[[${user.name}]]
</div>
<!-- 内敛脚本 th:inline="javascript" -->
<script th:inline="javascript" type="text/javascript">var user = [[${user.name}]];console.log(user);
</script>
<script th:src="@{/js/index.js}"></script>
<!-- 字面量 -->
<p><span th:text="'a'+'b'">文本字面量 ''</span><span th:text="2018+1">数字字面量</span><span th:if="${users == null}">null字面量</span>
</p>
<!-- 字符串拼接 -->
<p><span th:text="'第一种拼接方式'+${user.name}">第一种</span><span th:text="|第二种拼接方式${user.name}|">第二种</span>
</p>
<!--<p><span th:if="${sex} eq 1?'男':'女'">不清楚</span>
</p>-->
<!-- 运算关系判断算数运算: + - * / %关系比较: > < >= <= (gt lt ge le)相等判断: == != (eq ne)-->
<!-- #request(相当于HttpServletRequest 2.x使用#httpServletRequest)#session(相当于HttpSession 2.x使用#httpSession) ...表达式基本内置对象-->
<p><span th:text="${#request.getContextPath()}"></span>
</p>
<!-- 功能内置对象 #dates #strings #object #lists .....模板引擎提供一组功能性内置对象,可以在模板中直接使用这些功能对象提供的功能方法,以#开头引用-->
<p><span th:text="${#dates.format('2018/12/28','yyyy-MM-dd HH:mm:ss')}">时间功能对象</span></p>
</body>
</html>

 我们可以感受到Spring Boot集成Thymeleaf没有很多繁琐的操作,甚至很简单就可以去使用该模板引擎。更多的是我们对Thymeleaf特性的了解和功能的使用需要花一些时间,官方文档上面还是很齐全的,所以大家可以有时间多看一看官方文档提供的信息。

Spring Boot - Thymeleaf模板简介以及集成相关推荐

  1. Spring boot+Thymeleaf+easyui集成:js创建组件页面报错

    开发工具:Ideal 使用场景:Demo 前提:        环境:Spring boot +Thymeleaf+easyui 引入thymeleaf模板引擎 1 <html lang=&qu ...

  2. 后端开发实践——Spring Boot项目模板

    在我的工作中,我从零开始搭建了不少软件项目,其中包含了基础代码框架和持续集成基础设施等,这些内容在敏捷开发中通常被称为"第0个迭代"要做的事情.但是,当项目运行了一段时间之后再来反 ...

  3. Spring Boot + Thymeleaf 创建web项目

    本篇文章将引导你创建一个简单的Spring Boot web程序示例,涉及到的组件有:嵌入的Tomcat + Thymeleaf 模板引擎,可执行的 JAR 文件包. 开发工具: 1.Spring B ...

  4. Spring Boot(十二)集成spring-boot-starter-mail发送邮件

    项目GitHub地址 : https://github.com/FrameReserve/TrainingBoot Spring Boot(十二)集成spring-boot-starter-mail发 ...

  5. 第64节:Java中的Spring Boot 2.0简介笔记

    Java中的Spring Boot 2.0简介笔记 spring boot简介 依赖java8的运行环境 多模块项目 打包和运行 spring boot是由spring framework构建的,sp ...

  6. 搭建Spring Boot2.X集成Hibernate5项目,并集成传统SSH老项目的安全认证组件,以Spring Boot方式开发项目并集成到老系统

    搭建Spring Boot2.X集成Hibernate5项目,并集成传统SSH老项目的安全认证组件,以Spring Boot方式开发项目并集成到老系统 场景 可行性分析 搭建Spring Boot集成 ...

  7. Spring boot装载模板代码工程实践问题

    Spring boot装载模板代码工程实践问题 动态化补充 @KafkaListener 其它问题 JDK版本问题及解决 动态编译失败,出现程序包无法找到问题 Spring boot装载模板代码工程中 ...

  8. Spring Boot默认模板方案Thymeleaf

    Thymeleaf入门 web开发离不开动态页面的开发,目前来说最主流的方案是Thymeleaf Thymeleaf是一个模板框架,它可以支持多种格式的内容动态渲染非常强大,而且天然是与HTML相融合 ...

  9. Spring Boot Thymeleaf(十一)

    一.Thymeleaf 简介 Thymeleaf 是一款用于渲染 XML/XHTML/HTML5 内容的模板引擎.它与 JSP,Velocity,FreeMaker 等模板引擎类似,也可以轻易地与 S ...

最新文章

  1. 史上超级详细:HashMap源码分析,你了解到源码的魅力了嘛
  2. mysql partition赋权_mysql 创建用户及赋权
  3. Hadoop--xsync分发脚本
  4. sparql查询mysql_SPARQL常用查询
  5. 布局设置-Meta标签 and Media(来自bootstrap)
  6. 2018.08.02 权限管理 笔记
  7. React:工程化开发
  8. echarts x轴文字个数太多_echartsX轴文本数据太长溢出问题
  9. 散列表碰撞处理、开链法、HashTable散列
  10. java毕业设计开题报告SSM图书馆预约占座系统
  11. 习题合集-数据结构导论
  12. 实验室纳新语音文字记录
  13. Windows10 + Anaconda(python3.6)安装labelling
  14. linux目录名乱码,Linux下文件名乱码解决
  15. Web前端之CSS层叠样式表相关案例
  16. 什么是模块化代码?如何写?
  17. 刚刚,ChatGPT官宣数学能力再升级,网友:终于精通十以内加减法了
  18. BurpSuite专业版下载安装教程
  19. 【校招VIP】产品经理行测之数列题
  20. 如何搜索百度云盘里的文件

热门文章

  1. android 联机游戏平台,游聚平台/街机平台/主机联网/街机对战平台/网络街机
  2. HBuilderXHBuilder连接雷电模拟器“未检测到手机或模拟器” ---- 问题解决
  3. c语言json库如何编译,C语言的JSON库Jansson
  4. 修改opencv3.4 VideoCapture dshow模块以支持圆刚cv710等需要配置CrossBar的采集卡
  5. echarts组织架构图
  6. 购房税费计算技术支持
  7. 最大值最小值计算机一级,excel怎么找最大值和最小值 excel怎么计算最大值减最小值...
  8. Minecraft 从安装到入门
  9. SpringBoot和Mybatis-Plus
  10. Redis学习笔记·