SpringBoot引入模板引擎—— Thymeleaf

    科技2022-07-21  118

    因为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进行使用

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

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

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

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

     

    我们来看个简单的例子:

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

    编写前端页面:

    运行项目,打开浏览器

    有几处细节需要注意:

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

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

     

    Processed: 0.010, SQL: 8