当前位置: 代码迷 >> 综合 >> SpringBoot引入模板引擎—— Thymeleaf
  详细解决方案

SpringBoot引入模板引擎—— Thymeleaf

热度:110   发布时间:2023-11-15 20:55:27.0

因为SpringBoot使用的是jar包以及嵌入式的tomcat,因此并不支持jsp,因此我们需要模板引擎

目前的模板引擎有Velocity、Freemarker、Thymeleaf。而SpringBoot推荐的Thymeleaf:语法更简单,功能更强大。

1、引入thymeleaf

在auto中查看

只要我们把HTML页面放在classpath:/templates/,thymeleaf就能自动渲染;

2、实践

编写一个业务请求:

在新建的html文件里简单命名一些内容

 

启动项目,并打开浏览器,输入url

3、使用thymeleaf语法;

需要注意的是,在JSP中我们可以直接在body中用${hello},但是在html中则不行,需要按照thymeleaf的语法。

另外,我们在业务逻辑里面声明一个map,用以存储数据:

运行程序后,打开浏览器进行访问:

如果我们去掉div的th:text

再看看看浏览器显示的结果:

但即使这个html文件带有th:text但是未经模板引擎渲染,也是这样的显示。例如我们把这个html页面拷贝到桌面,直接打开:

我们注意到,在浏览器访问请求时,界面上所显示的内容是th:text的内容而非div的内容,这是为什么呢?其实答案已经显而易见了,那就是经过了模板引擎的渲染,模板引擎进行解析访问,则请求的数据就成了后端的数据

 

4、语法规则

1)、th:text:改变当前元素里面的文本内容;

?       th:任意html属性,来替换原生属性的值

例如在之前的页面中,有可能div会存在默认值,比如id,class。我们使用任意属性来替换原生属性的值

运行程序,我们在浏览器进行地址访问,并且在运行界面右键查看网页源代码:

注意到这里的id和class都变为了后台数据,但如果我们把这个页面单独拎出来,直接打开,查看页面源代码:

则这里并未取到后台数据!

那么这个th属性有多少个呢?我们查看官网文档,这些属性是按照优先级进行排序的:

我们可以详细看看每一个feature的含义

Fragment inclusion :片段包含,。类似于JSP中的include

Fragment iteration :遍历。c:foreach

Conditional evaluation :条件判断。c:if

Local variable definition :声明变量。c:set

General attribute modification :任意属性修改,支持prepend和append

Specific attribute modification :修改指定属性默认值

Text (tag body modification) :修改标签体内容

  • th:text :转义特殊字符
  • th:utext:不转义特殊字符

Fragment specification :声明片段

Fragment removal :清除片段

同时我们也看到在属性里面包含了表达式,这个表达式又有哪些呢?

1、 ${...}:获取变量值;OGNL;

    1)、获取对象的属性、调用方法    

    2)、使用内置的基本对象

3)、内置的一些工具对象:

2、*{...}:选择表达式:和${}在功能上是一样;

补充:配合 th:object进行使用

  1. #{...}:获取国际化内容
  2. @{...}:定义URL;

例如@{/order/process(execId=${execId},execType='FAST')}

  1. ~{...}:片段引用表达式

当然,还有如下的一些属性标签

 

我们来看个简单的例子:

我们在业务逻辑controller中,给map添加如下数据:

编写前端页面:

运行项目,打开浏览器

有几处细节需要注意:

1处,如果写为users,则页面显示为

2处的写法需要注意,可以在官方文档中查看