Spring Boot学习笔记(十二)


在这里插入图片描述

Spring Boot支持的视图技术

在日常开发中,进行前后端分离开发,使前端开发人员无需关注后端业务的具体实现,只关注自己页面的呈现效果即可。Spring Boot框架对很多常用的模板引擎技术提供了整合支持。
Spring Boot可整合的模板引擎技术

  • FreeMarker
    是一个基于模板生成输出文本(HTML页面、电子邮件、配置文件等)的模板引擎,同时它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入所开发产品的组件。
  • Groory
    是一种基于JVM(Java虚拟机)的敏捷开发语言,它结合了Python、Ruby和Smalltalk的许多强大特性,Groory代码能够与Java代码很好地结合,也能扩展现有代码。由于Groory运行在JVM上的特性,因此Groory可以使用其他Java语言编写的库。
  • Thymeleaf(重点)
    适用于Web和独立环境的现代服务器端Java模板引擎,该模板主要以静态HTML页面嵌入标签属性,浏览器可以直接打开模板文件,便于前后端联调。
  • Mustache
    轻逻辑的模板引擎(Logic-less templates),它是一个JS模板,对于用JS的分离展示。优势在于可以应用在JavaScript、PHP、Python、Perl等多种编程语言中。
    ……

Thymeleaf基本语法

Thymeleaf是一种现代的基于服务器端的Java模板引擎技术,也是一个优秀的面向Java的XML、XHTML、HTML5页面模板,它具有丰富的标签语言、函数和表达式。

常用标签

在HTML页面上使用Thymeleaf标签,Thymeleaf标签能够动态地替换掉静态内容,使页面动态展示。
Thymeleaf常用标签(示例代码):

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset=UTF-8">
    <link rel="stylesheet" type="text/css" media="all" href="../../css/gtvg.css" th:href="@{/css/gtvg.css}"/>
    <title>TiTle</title>
</head>
<body class="text-center">
	<p th:text="#{hello}>欢迎进入Thymeleaf的学习</p>
</body>
</html>
  • xmlns:th=“http://www.thymeleaf.org”:用于引入Thymeleaf模板引擎标签,使用关键字"th"标注标签是Thymeleaf模板提供的标签。
  • “th:href”:用于引入外联样式文件。
  • “th:text”:用于动态显示标签文本内容。
    除此之外,Thymeleaf模板提供了很多标签,通过一张表罗列Thymeleaf的常用标签,具体如下表显示:
    在这里插入图片描述

标准表达式

Thymeleaf模板引擎提供了多种标准表达式语法,先通过一张表来展示其主要语法及说明。
在这里插入图片描述

  • 变量表达式
    变量表达式${…}主要用于获取上下文中的变量值,示例代码如下
<p th:text="${title}">这是标题</p>

${…}动态获取p标签中的内容,在上下文中查看是否有title这个变量。如果有,会进行一个替换,也就是把“这是标题”替换成动态获取的数据;如果不存在title变量,那就显示默认值“这是标题”。
同时,Thymeleaf为变量所在域提供了一些内置对象,具体如下:

  • #ctx:上下文对象
  • #vars:上下文变量
  • #locale:上下文区域设置
  • #request:(仅限Web Context)HttpServletRequest对象
  • #response:(仅限Web Context)HttpServletResponse对象
  • #session:(仅限Web Context)HttpSession对象
  • #ServletContext:(仅限Web Context)ServletContext对象

假设要在Thymeleaf模板引擎页面中动态获取当前国家信息,可以使用#locale内置对象,示例代码如下:

The locale country is:<span th:text="${#locale.countre}">US</span>.

当我们访问这个页面,它就会从#locale(上下文区域设置这部分)去查找country这个变量,如果查到了,就进行动态数据替换,如果没有查到,就是“US”

  • 选择变量表达式

选择变量表达式和变量表达式用法类似,一般用于从被选定对象而不是上下文中获取属性值,如果没有选定对象,则和变量表达式一样,示例代码如下:

<div th:object="${session.user}">
	<p>Name:<span th:text="${#object.firstName}">Sebastian</span>.<p/>
	<p>Surname:<span th:text="${session.user.lastName}"Pepper</span>.</p>
	<p>Nationality:<span th:text="*{nationality}">Saturn</span>.</p>
</div>

${#object.firstName}变量表达式使用Thymeleaf模板提供的内置对象object获取当前上下文对象中的firstName属性值;
${session.user.lastName}变量表达式获取当前user对象的lastName属性值;
*{nationality}选择变量表达式获取当前指定对象user的nationality属性值。

  • 消息表达式
    #{…}主要用于Thymeleaf模板页面国际化内容的动态替换和展示,也就是说,在进行页面国际化的时候,需要用到#{…}。在进行国际化设置时,还需要提供一些国际化配置文件。
  • 链接表达式
    @{…}一般用于页面跳转或者资源的引入,使用频繁。示例代码如下:
<a href="details.html"
	th:href="@{http://localhost:8080/gtvg/order/details(orderId=${o.id})}">view</a>
<a href="details.html" th:href="@{/order/details(orderId=${o.id})}">view</a>

第一个a标签写了一个绝对链接地址,第二个写了一个相对链接地址。在有参表达式中,需要按照@{路径(参数名称=参数值,参数名称=参数值…)}的形式编写,同时该参数的值可以使用变量表达式来传递动态参数的值。
也就是说,在我们点击“view”的超链接时,可以发送到一个请求到http://localhost:8080/gtvg/order/details,并且动态地进行参数的传递,只不过格式需要按照上述要求的形式编写。

  • 片段表达式
    ~{…}用来标记一个片段模板,并根据需要移动或传递给其他模板,崔常用的是使用th:insert或th:replace属性插入片段,示例代码如下:
<div th:insert="~{thymeleatDemo::title}"></div>

上述代码中,使用th:insert属性将title片段模板引用到该div标签中。thymeleatDemo为模板名称,Thymeleaf会自动查找"classpath://resources/templates/"目录下的thymeleatDemo模板,title为声明的片段名称。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值