当前位置: 首页 > news >正文

【Spring Boot】Thymeleaf模板引擎 — Thymeleaf的高级用法

Thymeleaf的高级用法

主要介绍Thymeleaf的内联、内置对象、内置变量等高级用法。

1.内联

虽然通过Thymeleaf中的标签属性已经几乎满足了开发中的所有需求,但是有些情况下需要在CSS或JS中访问后台返回的数据。所以Thymeleaf提供了th:inline="text/javascript/none"标签,使用[[…]]内联表达式的方式在HTML、JavaScript、CSS代码块中轻松访问model对象数据。

1.1 文本内联

Thymeleaf内联表达式使用[[…]]或[(…)]语法表达。先在父级标签定义使用内联方式th:inline=“text”,然后在标签内使用[[…]]或[(…)]表达式操作数据对象。文本内联比th:text的代码更简洁。下面通过示例演示内联的使用方式。

首先,创建页面inline.html。示例代码如下:

<h1>Thymeleaf模板引擎</h1>
<div><h1>内联</h1><div th:inline="text"><p>Hello[[${userName}]] !</p><br/></div>
</div>

以上代码等价于:

    <div th:inline="text"><h1>不使用内联</h1><p th:text=" 'Hello’, + ${userName} + '!'"></p><br/></div>

通过以上两个示例可以看出使用内联语法会更简洁一些。

1)th:inline="text"表示使用文本内联方式。

2)任何父标签都可以加上th:inline。

3)[[…]] 等价于th:text结果将被HTML转义,[(…)]等价于th:utext结果不会被HTML转义。

然后,创建后台路由/inline,示例代码如下:

    @RequestMapping("/inline")public String inline(ModelMap map) {map.addAttribute("userName", "admin");return "inline";}

在上面的示例中,后台返回inline.html页面,同时返回userName=admin。

最后,运行测试。启动项目后,在浏览器中输入地址http://localhost:8080/inline,则会出现如图所示的结果。

在这里插入图片描述

页面显示后台返回的userName为admin,比之前介绍的th:text=${userName}的方式更加简单、清晰。

1.2 脚本内联

脚本内联,顾名思义就是在JavaScript脚本中使用内联表达式。使用时只需要在<script>标签上加入th:inline="javascript"属性,然后在JavaScript代码块中就能使用[[]]表达式。实现在JavaScript脚本中获取后台传过来的参数。

首先,修改inline.html页面,增加如下脚本:

<script th:inline="javascript">var name = 'hello, ' + [[${userName}]];alert(name);
</script>

在上面的示例中,在<script>标签内加入th:inline=“javascript”,表示能在JavaScript中使用[ [ ] ]取值。在访问页面时,根据后端传值拼接name值,并以alert的方式弹框展示。

然后启动项目,在浏览器中输入地址http://localhost:8080/inline,会出现如图所示的结果。

在这里插入图片描述

显示页面会先弹出一个alert提示框,显示“hello admin”,说明使用脚本内联绑定了后台传过来的数据。

1.3 样式内联

Thymeleaf还允许在<style>标签中使用内联表达式动态生成CSS属性样式。下面通过示例演示内联CSS样式的用法。

首先,修改inline.html页面,加入如下样式:

<style type="text/css" th:inline="css" th:with="color='yellow', fontSize='25px'">p {color: /*[[${color}]]*/ red;font-size: [(${fontSize})];}
</style>

在上面的示例中,与内联JavaScript一样,CSS内联也允许

然后,修改/inline路由,返回fontSize和color,示例代码如下:

    @RequestMapping("/inline")public String inline(ModelMap map) {map.addAttribute("fontSize", "20px");map.addAttribute("color", "yellow");map.addAttribute("userName", "admin");return "inline";}

在上面的示例中,增加了fontSize和color两个CSS的属性样式,设置fontSize为20px,color为yellow。

然后启动项目,在浏览器中输入地址http://localhost:8080/inline,页面显示的字体大小和颜色根据后台返回的数据显示,说明CSS内联生效。

1.4 禁用内联

Thymeleaf支持使用th:inline =“none”来禁止使用内联。示例代码如下:

<!--/*禁用内联表达式*/-->
<p th:inline="none">[[${info}]]</p>
<!--/*禁用内联表达式*/-->
<p th:inline="none">[[Info]]</p>

2.内置对象

Thymeleaf包含一些内置的基本对象,可以用于视图中获取上下文对象、请求参数、Session等信息。这些基本对象使用#开头,如表所示。

在这里插入图片描述
如表所示,Thymeleaf提供了有一系列的对象和属性用于访问请求参数、会话属性等应用属性。下面以其中两个常用的对象作为示例来演示。

步骤01 定义后台方法传值。

创建一个后台方法,后台传回request请求参数和session属性,示例代码如下:

    @RequestMapping("/object")public String test1(HttpServletRequest request) {request.setAttribute("request", "spring boot");request.getSession().setAttribute("session", "admin session");request.getServletContext().setAttribute("servletContext", "Thymeleaf servletContext");return "baseobject";}

在上面的示例中,我们分别在request和session对象中写入了相关的测试,验证前台是否能获取到这些自定义的Web请求信息。

步骤02 前端页面接收参数。

接下来看看前端页面如何通过Thymeleaf内置的基本对象获取后端传递的值,在/resources目录下新建一个前端页面baseobject.html,示例代码如下:

<h1>Thymeleaf模板引擎</h1>
<h3>基本对象</h3>
<p th:text="${#request.getAttribute('request')}"></p>
<p th:text="${#session.getAttribute('session')}"></p>
<p th:text="${#servletContext.getAttribute('servletContext')}"></p>

在上面的示例中,我们在HTML页面中通过#request、#session这些对象就能获取Web请求中的相关信息。

步骤03 启动验证。

启动项目后,在浏览器中输入地址http://localhost:8080/object,则会出现如图所示的结果。

在这里插入图片描述

在HTML页面中,通过#request、#session这些对象成功获取了后台返回的Web请求信息。

3.内嵌变量

为了模板更加易用,Thymeleaf还提供了一系列公共的Utility对象(内置于Context中),可以通过#直接访问。具体的对象如表所示。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Thymeleaf除了定义上面这些常用的对象外,还有一些其他的utility对象,比如#ids,这里不再逐一列举。

http://www.lryc.cn/news/115953.html

相关文章:

  • 用html+javascript打造公文一键排版系统13:增加半角字符和全角字符的相互转换功能
  • 元宇宙3D数字虚拟客服打造年轻化、数字化营销新品牌
  • micromamba快速安装(windows版本)
  • HTML <source> 标签
  • 香港第一金:加息预期仍令贵金属承压,黄金仍需关注破位情况
  • C语言学习笔记 vscode使用外部console-11
  • 96 | Python 小项目—— 学生成绩管理系统
  • 【uniapp使用web-view点击返回报错后返回不了】
  • Map Reduce教程_编程入门自学教程_菜鸟教程-免费教程分享
  • 吉利科技携手企企通,打造集团化数智供应链系统
  • 2023河南萌新联赛第(四)场:河南大学 F - 小富的idea
  • 总结线程池
  • 基础的 lftp 使用方法
  • python之prettytable库的使用
  • google PGS 下一代id
  • 【elasticsearch】关于elasticsearch的max_result_window限制问题的解决方式思考
  • 音频光耦合器
  • 【C++精华铺】3.C++入门 引用(const)、内联函数
  • 生态系统服务(InVEST模型)供给与需求、价值核算技术及人类活动、重大工程项目、自然保护区、碳中和等领域中实际案例分析
  • TiDB Serverless 正式商用,全托管的云服务带来数据管理和应用程序开发的全新体验
  • PXE-kickstart无人值守安装操作系统
  • 使用Flask.Request的方法和属性,获取get和post请求参数(二)
  • 解决 idea maven依赖引入失效,无法正常导入依赖问题
  • Python之集合(set)基础知识点
  • flutter 没有open android module in Android studio 插件代码爆红
  • 计算机网络实验2:网络嗅探
  • 智慧防灾:数字孪生技术的应用
  • Google 扫码器(仅限 Android)
  • pandoc word转markdown之后正则修改
  • 使用Python和wxPython将图片转换为草图