当前位置: 首页 > 编程日记 > 正文

SpringBoot第十篇:thymeleaf详解

作者:追梦1819
原文:https://www.cnblogs.com/yanfei1819/p/10931435.html
版权声明:本文为博主原创文章,转载请附上博文链接!

引言

SpringBoot 对 Web 的支持,官方推荐的是模板引擎 thymelaf。本章中,作者原意是直接讲解 SpringBoot 与 Thymelaf 的集成。但是在示例完成时,发现集成并不难。核心关注点应该是 Thymelaf 模板引擎本身的用法。故本章将其单独提出来讲解。集成部分待下一章详解。


简介

Thymeleaf 是一款用于渲染XML/XHTML/HTML5内容的模板引擎。类似JSP,Velocity,FreeMaker等,它也可以轻易的与Spring MVC等Web框架进行集成作为Web应用的模板引擎。与其它模板引擎相比,Thymeleaf最大的特点是能够直接在浏览器中打开并正确显示模板页面,而不需要启动整个Web应用。在开发团队中实现更强大的协调作用。


功能特性

  • 原型即页面;

  • 国际化支持;

  • 开箱即用;

  • 与 Spring 完美集成。


标准表达式语法

1、 ${...} 变量表达式,Variable Expressions

变量表达式可使用 thymleaf 的内置对象和内置方法。例如:

<p>Today is: <span th:text="${today}">13 february 2011</span>.</p>

2、@{...} 链接表达式,Link URL Expressions

用于静态资源的引用,form表单的请求等链接。例如:

无参:@{/xxx}有参:@{/xxx(k1=v1,k2=v2)} 对应url结构:xxx?k1=v1&k2=v2引入本地资源:@{/项目本地的资源路径}引入外部资源:@{/webjars/资源在jar包中的路径}

3、#{...} 消息表达式,Message Expressions

信息表达式通常用于国际化。

4、~{...} 代码块表达式,Fragment Expressions

代码表达式主要用来页面布局的,支持两种语法结构:

  • 推荐:~{templatename::fragmentname}
  • 支持:~{templatename::#id}

注意:

  1. templatename:模版名,Thymeleaf会根据模版名解析完整路径:/resources/templates/templatename.html,要注意文件的路径;
  2. fragmentname:片段名,Thymeleaf通过th:fragment声明定义代码块,即:th:fragment="fragmentname"
  3. id:HTML的id选择器,使用时要在前面加上#号,不支持class选择器;
  4. 代码块表达式需要配合th属性(th:insert,th:replace,th:include)一起使用:

th:insert:将代码块片段整个插入到使用了th:insert的HTML标签中;

th:replace:将代码块片段整个替换使用了th:replace的HTML标签中;

th:include:将代码块片段包含的内容插入到使用了th:include的HTML标签中。

5、*{...} 选择(星号)变量表达式,Selection Variable Expressions

选择表达式很像变量表达式,不过它们用一个预先选择的对象来代替上下文变量容器(map)来执行。

变量表达式使用频率最高,其功能也是非常的丰富。所以我们先从简单的代码块表达式开始,然后是消息表达式,再是链接表达式,最后是变量表达式,随带介绍选择变量表达式。


内置对象和方法

1、内置对象

  • ctx :上下文对象。
  • vars :上下文变量。
  • locale:上下文的语言环境。
  • request:(仅在web上下文)的 HttpServletRequest 对象。
  • response:(仅在web上下文)的 HttpServletResponse 对象。
  • session:(仅在web上下文)的 HttpSession 对象。
  • servletContext:(仅在web上下文)的 ServletContext 对象。

2、内置方法

  • strings:字符串格式化方法,常用的Java方法它都有。比如:equals,equalsIgnoreCase,length,trim,toUpperCase,toLowerCase,indexOf,substring,replace,startsWith,endsWith,contains,containsIgnoreCase等;

  • numbers:数值格式化方法,常用的方法有:formatDecimal等;

  • bools:布尔方法,常用的方法有:isTrue,isFalse等;

  • arrays:数组方法,常用的方法有:toArray,length,isEmpty,contains,containsAll等;

  • listssets:集合方法,常用的方法有:toList,size,isEmpty,contains,containsAll,sort等;

  • maps:对象方法,常用的方法有:size,isEmpty,containsKey,containsValue等;

  • dates:日期方法,常用的方法有:format,year,month,hour,createNow等。


表达式支持的语法

字面(Literals)

  • 文本文字(Text literals): 'one text', 'Another one!',…
  • 数字文本(Number literals): 0, 34, 3.0, 12.3,…
  • 布尔文本(Boolean literals):true, false
  • 空(Null literal):null
  • 文字标记(Literal tokens):one, sometext, main,…

文本操作(Text operations)

  • 字符串连接(String concatenation):+
  • 文本替换(Literal substitutions):|The name is ${name}|

算术运算(Arithmetic operations)

  • 二元运算符(Binary operators):+, -, *, /, %
  • 减号(单目运算符)Minus sign (unary operator):-

布尔操作(Boolean operations)

  • 二元运算符(Binary operators):and, or
  • 布尔否定(一元运算符)Boolean negation (unary operator):!, not

比较和等价(Comparisons and equality)

  • 比较(Comparators):>, <, >=, <= (gt, lt, ge, le)
  • 等值运算符(Equality operators):==, != (eq, ne)

条件运算符(Conditional operators)

  • If-then:(if) ? (then)
  • If-then-else:(if) ? (then) : (else)
  • Default: (value) ?:(defaultvalue)


常用 th 属性

html有的属性,Thymeleaf基本都有,而常用的属性大概有七八个。其中th属性执行的优先级从1~8,数字越低优先级越高。

  • th:text :设置当前元素的文本内容,相同功能的还有th:utext,两者的区别在于前者不会转义html标签,后者会。优先级不高:order=7;
  • th:value:设置当前元素的value值,类似修改指定属性的还有th:srcth:href。优先级不高:order=6;
  • th:each:遍历循环元素,和th:text或th:value一起使用。注意该属性修饰的标签位置,详细往后看。优先级很高:order=2;
  • th:if:条件判断,类似的还有th:unlessth:switchth:case。优先级较高:order=3;
  • th:insert:代码块引入,类似的还有th:replaceth:include,三者的区别较大,若使用不恰当会破坏html结构,常用于公共代码块提取的场景。优先级最高:order=1;
  • th:fragment:定义代码块,方便被th:insert引用。优先级最低:order=8;
  • th:object:声明变量,一般和*{}一起配合使用,达到偷懒的效果。优先级一般:order=4;
  • th:attr:修改任意属性,实际开发中用的较少,因为有丰富的其他th属性帮忙,类似的还有th:attrappend,th:attrprepend。优先级一般:order=5


总结

总体来说,thymelaf 的使用还是很简单的。

这篇文章参照了 thymelaf 官方文档 ,所列举的都为常用的一些用法或者语法。当然,如果读者的英文阅读能力不错,推荐将 官方文档 通读一遍,细枝末节之处将更加清晰。另一方面,如果读者的基础比较强,作者建议去阅读 thymelaf 的源码。模板引擎,其实大体的原理都接近。此处篇幅所限,不做深入讲解。

后续如果有时间,作者将跟大家一起学习、分享源码系列。
  源码:我的GitHub

参考

thymelaf 官方文档



1183871-20190527163006503-1962736544.png

转载于:https://www.cnblogs.com/yanfei1819/p/10931435.html

相关文章:

嵌入式系统开发过程中遇到的——volatile

嵌入式 系统开发过程中遇到的—— volatile 对于不同的计算机体系结构&#xff0c;设备可能是端口映射&#xff0c;也可能是内存映射的 。如果系统结构支持独立的 I/O 地址空间&#xff0c;并且是端口映射&#xff0c;就必须使用汇编语言完成实际对设备的控制&#xff…

薏米红豆粥的功效和实践演示

熬薏米红豆粥有很多技巧和讲究。薏米很硬&#xff0c;红豆也很硬&#xff0c;假设已经煮在锅里&#xff0c;大概熬一个多小时不坏&#xff0c;这是一种浪费火灾或电力&#xff0c;它甚至可以把水烧开&#xff0c;原因症结。我建议的方法有两种&#xff1a;第一种方法是在锅里加…

Java项目:财务预算管理系统(java+SSM+Jsp+Mysql+Layui+Maven)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 一、项目简述 功能包括&#xff1a;实现公司对项目的管理。 二、项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 mysql Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09; …

POJ 3080 多个串最长公共子序列

求多个串最长公共子序列&#xff0c;字典序最小输出。枚举剪枝kmp.比较简单&#xff0c;我用find直接查找16ms #include<iostream> #include<string> #include<algorithm> using namespace std; string s[61]; int main() {int ta;cin>>ta;int n;while…

HDU 2561 第二小整数

2019-05-27 18:07:06 加油&#xff0c;坚持&#xff01;&#xff01;&#xff01; 水题 #include <bits/stdc.h> using namespace std; int a[100]; int main() {int t;scanf("%d", &t);while(t--){int n;scanf("%d", &n);for (int i 0; i …

Java项目:在线高中考试系统(java+SSM+Jsp+Mysql+Maven)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 项目分为前台和后台&#xff0c;前台主要为学生角色、后台主要为管理员角色。 管理员添加试题和发布试卷&#xff0c;学生负责在线考试、在线查看成绩和错题记录列表等。 管理员功能有&#xff1a;年级管理…

asp.net mvc 学习

Routing讲解&#xff1a; http://www.cnblogs.com/wangiqngpei557/p/3379095.html Filter讲解&#xff1a; http://www.cnblogs.com/ymnets/p/3452407.html ASP.NET MVC 支持以下类型的操作筛选器&#xff1a; 授权筛选器。 这些筛选器用于实现 IAuthorizationFilter 和做出关于…

Linux数据库性能优化--文件系统相关优化

实际也中也用到下文中所说的内存文件系统1、ramfs 记得是32位文件系统安装oracle 为oracle分配SGA突破1.7G大小限制2、mmap 的文件可以放在tmpfs挂载的文件系统中http://www.ibm.com/developerworks/cn/linux/management/tune/index.html1&#xff0e; 引言实践证明Lin…

jQuery Mobile的学习时间bottonbutton的事件学习

版权声明&#xff1a;本文为博主原创文章。未经博主同意不得转载。https://blog.csdn.net/xmt1139057136/article/details/27700521 程序猿都非常懒&#xff0c;你懂的&#xff01; 生命的绝唱来机仅仅争朝夕&#xff0c;如诗的年华更需惜时如金。不要让今天的懈怠成为一生的痛…

C++中 public,protected, private 访问标号小结

第一&#xff1a;private, public, protected 访问标号的访问范围。 private&#xff1a; 只能由1.该类中的函数、2.其友元函数访问。 不能被任何其他访问&#xff0c;该类的对象也不能访问。 protected&#xff1a; 可以被1.该类中的函数、2.子类的函数、以及3.其友元函数…

Java项目:学生管理系统(java+Springboot+Maven+mybatis+Vue+Mysql)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 一、项目简述 本系统功能包括&#xff1a; 学生管理&#xff0c;教师管理&#xff0c;课程管理&#xff0c;成绩管理&#xff0c;系统管理等等。 二、项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 M…

UVA 11752 超级幂

UVA 11752 超级幂 Z - The Super PowersTime Limit:1000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Submit Status Practice UVA 11752Description 题意&#xff1a;定义一个数为超级幂&#xff0c;当这个数能表示成至少两个不同数字的幂时。如162^4&#x…

Awstats

c是一个非常简洁而且强大的统计工具。它可以统计您站点的如下信息&#xff1a;一&#xff1a;访问量&#xff0c;访问次数&#xff0c;页面浏览量&#xff0c;点击数&#xff0c;数据流量等精确到每月、每日、每小时的数据二&#xff1a;访问者国家、访问者IP、操作系统、浏览器…

fixture详细介绍-作为参数传入,error和failed区别

前言 fixture是pytest的核心功能&#xff0c;也是亮点功能&#xff0c;熟练掌握fixture的使用方法&#xff0c;pytest用起来才会得心应手&#xff01; fixture简介 fixture的目的是提供一个固定基线&#xff0c;在该基线上测试可以可靠地和重复地执行。fixture提供了区别于传统…

哈佛结构和冯诺依曼结构区别。

哈佛结构是一种将程序指令存储和数据存储分开的存储器结构。中央处理器首先到程序指令存储器中读取程序指令内容&#xff0c;解码后得到数据地址&#xff0c;再到相应的数据存储 器中读取数据&#xff0c;并进行下一步的操作&#xff08;通常是执行&#xff09;。程序指令存储和…

js 数据函数

//shift&#xff1a;删除原数组第一项&#xff0c;并返回删除元素的值&#xff1b;如果数组为空则返回undefined var a [1,2,3,4,5]; var b a.shift(); //a&#xff1a;[2,3,4,5] b&#xff1a;1 //unshift&#xff1a;将参数添加到原数组开头&#xff0c;并返回数组的长度…

Java项目:平行志愿管理系统(java+Springboot+Maven+mybatis+Vue+Mysql)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 一、项目简述本系统功能包括&#xff1a; 系统管理&#xff0c;招生计划&#xff0c;学生管理&#xff0c;录取结果&#xff0c;自动分配&#xff0c;调剂管理等等。 二、项目运行 环境配置&#xff1a; J…

冒泡 MS Azure 不便宜。。。

一直在等 MS Azure 中国开卖&#xff0c; 最近有消息说正式商用了。。。 看看去&#xff0c;ok 发现官方网站 很奇葩。没有购买的地方 说毛线 啊 卧槽 欺骗感情还是吊人胃口&#xff1f; 好看了一下VM的价格&#xff0c;卧槽真不便宜。 即使是 768 MB的也要 0.22RMB 小时。本来…

数据库的概念以及MYSQL的安装和卸载

一、数据库的基本概念&#xff1a; 1、什么是数据库&#xff1f; DataBase&#xff0c;简称DB。是用来存储和管理数据的仓库。 2、数据库的特点&#xff1a; 持久化存储数据的。其实数据库就是一个文件系统。方便存储和管理数据使用了统一的方式操作数据库——SQL  3、最热门…

对ARM异常(Exceptions)的理解

对ARM异常&#xff08;Exceptions&#xff09;的理解 1 &#xff0e;对 ARM 异常&#xff08; Exceptions &#xff09;的理解 所有的系统引导程序前面中会有一段类似的代码&#xff0c;如下&#xff1a; .globl _start &#xff1b;系统复位位置 _s…

Java项目:花店商城系统(java+Springboot+Maven+mybatis+Vue+Mysql)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 一、项目简述 本系统功能包括&#xff1a; 商品的分类展示&#xff0c;用户的注册登录&#xff0c;购物车&#xff0c;订单结算&#xff0c;购物车加减&#xff0c;后台商品管理&#xff0c;分类管理&#x…

简单又好看的按钮,扁平化按钮。

原文 http://blog.csdn.net/peijiangping1989/article/details/19333779主题 安卓开发今天分享一下流行的扁平化按钮。完全不需要用到图片哦。效果图如下&#xff1a; 里面有2个按钮都是一样的模式。只要修改的色值就可以。下面跟我来更新你的UI吧。 首先编写 button.xml 代码…

MahApps.Metro

ModernUI for WPF Mahapps.metro home Mahapps.metro Quick start Mahapps.metro controls转载于:https://www.cnblogs.com/xakml/p/3682173.html

用herl工具解决微信内链接或二维码可直接用外部浏览器打开

很多朋友问我怎么解决微信内点击链接或扫描二维码可以直接跳出微信在外部浏览器打开网页链接&#xff0c;其实这并不难&#xff0c;只要我们实现微信跳转功能即可。 下面给大家推荐 herl工具&#xff08;http://www.nicejump.cn/&#xff09; 使用步骤 1. 用浏览器打开我们的工…

shell之“/dev/null 21”

shell中可能经常能看到&#xff1a;>/dev/null 2>&1 命令的结果可以通过%>的形式来定义输出 分解这个组合&#xff1a;“>/dev/null 2>&1” 为五部分。 1&#xff1a;> 代表重定向到哪里&#xff0c;例如&#xff1a;echo "123" &g…

Java项目:角色权限后台脚手架系统(java+Springboot+Maven+myBaits-Plus+Vue+Element-UI+Mysql)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; Springboot框架myBaits-PlusMySQL实现的角色权限后台管理脚手架系统实战项目&#xff0c;实现的是所有系统最基础的后台管理功能&#xff0c;有了这个脚手架&#xff0c;以后开发别的项目就在这上面快速增加…

30+程序员,平时都忙些什么事情?平时都想些什么?以后有啥计划?

很多人都说&#xff0c;30岁以后了&#xff0c;写程序还有前途嘛&#xff1f;我有时候也迷茫&#xff0c;但是迷茫过后&#xff0c;总会给自己寻找方向&#xff0c;每个人都需要有个信念、没有信念&#xff0c;活着就没意思&#xff0c;无聊&#xff0c;觉得没奔头了。 废话少说…

用于制图、写电子邮件、创建条形码控件Aspose.Total

2019独角兽企业重金招聘Python工程师标准>>> Aspose.Total 提供了 Aspose 可以使用的任何组件&#xff0c;以及你每年订阅中发布的所有新组件。通过它&#xff0c;你能够有计划地操纵一些商业中最流行的文件格式&#xff1a;Word, Excel, PowerPoint, Project, PDF …

循环for语句 if语句

if语句&#xff1a; if(表达式){ 代码 }else if(表达式){ 代码 } for循环&#xff1a; for(var i0; i<10; i){ alert(1); (弹窗&#xff09; } if语句&#xff1a; if(表达式){ 代码 }else if(表达式){ 代码 } for循环&#xff1a; for(var i0; i<10; i){ alert(1); (弹窗…

Linux中的粘滞位

Linux中的粘滞位 Sticky 位是一个访问权限标志位&#xff0c;可以用来标示文件和路径。 历史&#xff1a; 粘滞位是在1974年Unix的第5版中引入的&#xff0c;用来设置可执行文件。当可执行文件设置粘滞位之后&#xff0c;它能够指示操作系统在程序退出后&#xff0c;保留程序…