学习小片段——thymeleaf入门
1: 概述
thymeleaf是一个跟 Velocity、FreeMarker 类似的模板引擎,和以前学的jsp相近,但性能上无疑是比jsp好。
参考文档官方文档:https://www.thymeleaf.org/doc/tutorials/2.1/usingthymeleaf.html#what-is-thymeleaf
本文环境:win10,jdk1.8, idea2018, maven3.5.4, springboot1.5.19,
2:引入依赖
pom.xml 中加入thymeleaf依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
springboot1.4版本之后,也可以使用thymeleaf3来提高效率,与thymeleaf3匹配的是thymeleaf layout2 :
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<thymeleaf.version>3.0.0.RELEASE</thymeleaf.version>
<thymeleaf-layout-dialect.version>2.0.0</thymeleaf-layout-dialect.version>
</properties>
因为在默认配置下,thymeleaf对html的内容要求很严格,比如<meta charset=”UTF-8″ />,所以可能会造成一些不便
可选择更改application配置文件 spring.thymeleaf.mode=HTML
或者修改配置 spring.thymeleaf.mode=LEGACYHTML5 并搭配额外的NekoHTML
<dependency>
<groupId>net.sourceforge.nekohtml</groupId>
<artifactId>nekohtml</artifactId>
<version>1.9.22</version>
</dependency>
然后创建html文件

在<html>标签中添加 xmlns:th="http://www.thymeleaf.org" ,引入名称空间,
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
</body>
</html>
3:表达式语法
public class User {
private Integer id;
private String name;
private Byte age;
private Boolean sex;
private Set<String> hobbys;
private Object other;
//getter和setter
}
@RequestMapping("/test")
public String test(Map<String, Object> map){
User user = new User();
user.setId(1);
user.setName("Adam");
user.setAge((byte) 20);
user.setSex(true);
user.addHobby("A");
user.addHobby("C");
user.addHobby("D");
map.put("user", user);
return "test";
}
3.1:简单表达式
${...} 变量表达式
*{...} 选择变量表达式
#{...} 消息表达式
@{...} 链接url表达式
<!--/*@thymesVar id="name" type="java.lang.String"*/-->
<h2 th:text="${user.id}"></h2>
<div th:object="${user}">
<h3 th:text="*{age}"></h3>
<h3 th:text="*{sex}"></h3>
</div> <a th:href="@{/index.html}">to index page</a>

消息表达式 用于从消息源中提取消息内容实现国际化。 详解:https://blog.csdn.net/skyupward/article/details/54987618变量表达式和星号表达式:
<div th:object="${user}">
<h3 th:text="*{age}"></h3>
<h3 th:text="*{sex}"></h3>
</div>
等价于:
<div>
<h3 th:text="${user.age}"></h3>
<h3 th:text="${user.sex}"></h3>
</div>
两者也可混合使用:
<div th:object="${user}">
<h3 th:text="${user.age}"></h3>
<h3 th:text="*{sex}"></h3>
</div>
3.2:字面量
'one text','another one!',... 字符串
0,34,3.0,12.3,... 数值
true false 布尔类型
null 空指针
3.3:字符串操作
+ 字符串连接
|The name is ${name}| 字符串替换
3.4:算数运算
+-*/% 二元运算符
- 单目运算符
3.5:布尔
and, or 二元操作符
!, not 一元运算符
3.6:比较运算
> , < , >= , <= ,== , != (gt , lt , ge , le, eq, ne)
3.7:条件运算
(if) ? (then)
(if) ? (then) : (else)
(value) ?:(defaultvalue)
3.8:th:*
th:text, th:utext 改变当前元素里面的文本内容;
th:(任意html属性) 替换原生属性的值;
th:insert,th:replace 片段包含,如同 jsp:include
th:each 遍历,如同c:forEach
th:if , th:unless, th:switch, th:case 条件判断, c:id
th:object, th:with 变量声明, c:set
th:attr,th:attrprepend, th:attrappend 任意属性修改
th:value, th:href, th:src...... 修改指定属性默认值
......
一些小示例:
<!--字符串-->
<h2 th:text="|hello ${user.name}|"></h2>
<!--条件判断-->
<a th:if="${user.id != null}" th:href="@{/index}">to index page</a>
<a th:unless="${user.other == null}" th:href="@{/other}">to other page</a>
<!--遍历-->
<!--/*@thymesVar id="hobbys" type="java.util.Set"*/-->
<ul>
<li th:each="hobby,iterStat : ${user.hobbys}" th:text="|${iterStat.index+1}, ${hobby} |"></li>
</ul>

iterStat是状态变量,属性有:
index:当前迭代对象的 index(从0开始计算)
count: 当前迭代对象的 index(从1开始计算)
size:被迭代对象的大小
current:当前迭代变量
even/odd:布尔值,当前循环是否是偶数/奇数(从0开始计算)
first:布尔值,当前循环是否是第一个
last:布尔值,当前循环是否是最后一个
暂时到此,
学习小片段——thymeleaf入门的更多相关文章
- 学习小片段——springboot 错误处理
一:先看看springboot默认的错误处理机制 springboot默认会判断是否是浏览器(http请求头Accept是否含有 text/html)来选择返回html错误页面或json错误信息 原因 ...
- .NET Core 学习资料精选:入门
开源跨平台的.NET Core,还没上车的赶紧的,来不及解释了-- 本系列文章,主要分享一些.NET Core比较优秀的社区资料和微软官方资料.我进行了知识点归类,让大家可以更清晰的学习.NET Co ...
- 微信小程序开发入门教程
做任何程序开发要首先找到其官方文档,微信小程序目前还在邀请内测阶段,目前官方放出了部分开发文档,经过笔者一天的查看和尝试,感觉文档并不全面,但是通过这些文档已经能够看出其大概面貌了.闲话不多说,我们先 ...
- WEB前端学习代码片段记录
1.JS设计模式片段 Function.prototype.addMethod = function (name,fn) { this.prototype[name] = fn; return thi ...
- .Net Core ORM选择之路,哪个才适合你 通用查询类封装之Mongodb篇 Snowflake(雪花算法)的JavaScript实现 【开发记录】如何在B/S项目中使用中国天气的实时天气功能 【开发记录】微信小游戏开发入门——俄罗斯方块
.Net Core ORM选择之路,哪个才适合你 因为老板的一句话公司项目需要迁移到.Net Core ,但是以前同事用的ORM不支持.Net Core 开发过程也遇到了各种坑,插入条数多了也特别 ...
- 学习《零基础入门学习Python》电子书PDF+笔记+课后题及答案
初学python入门建议学习<零基础入门学习Python>.适合新手入门,很简单很易懂.前一半将语法,后一半讲了实际的应用. Python3入门必备,小甲鱼手把手教授Python,包含电子 ...
- 分布式学习系列【dubbo入门实践】
分布式学习系列[dubbo入门实践] dubbo架构 组成部分:provider,consumer,registry,monitor: provider,consumer注册,订阅类似于消息队列的注册 ...
- [精品书单] C#/.NET 学习之路——从入门到放弃
C#/.NET 学习之路--从入门到放弃 此系列只包含 C#/CLR 学习,不包含应用框架(ASP.NET , WPF , WCF 等)及架构设计学习书籍和资料. C# 入门 <C# 本质论&g ...
- Hadoop学习笔记(1) ——菜鸟入门
Hadoop学习笔记(1) ——菜鸟入门 Hadoop是什么?先问一下百度吧: [百度百科]一个分布式系统基础架构,由Apache基金会所开发.用户可以在不了解分布式底层细节的情况下,开发分布式程序. ...
随机推荐
- 现代 PHP 新特性 —— 内置的 HTTP 服务器 (转)
转自 https://laravelacademy.org/post/4422.html 从 PHP 5.4.0 起,PHP内置了Web服务器,这对于认为需要Apache或Nginx才能预览PHP应用 ...
- jquery 根据文本设置选中某个选项
<select name="streetid" id="streetid"> <option value="4">a ...
- OR,RR,HR 临床分析应用中的差别 对照组暴露比值b/d
1.相对危险度(relative risk,RR).指暴露于某因素发生某事件的风险,即A/(A+B),除以未暴露人群发生的该事件的风险,即C/(C+D),所得的比值,即RR=[A/(A+B)]/[C/ ...
- 爬虫(二)Python网络爬虫相关基础概念、爬取get请求的页面数据
什么是爬虫 爬虫就是通过编写程序模拟浏览器上网,然后让其去互联网上抓取数据的过程. 哪些语言可以实现爬虫 1.php:可以实现爬虫.php被号称是全世界最优美的语言(当然是其自己号称的,就是王婆 ...
- VS中无法打开Qt资源文件qrc
问题:双击项目中的qrc文件没反应. 解决方法: 网上搜索的方法说是要,右击->打开方式,添加qrceditor编辑器 但我的项目中Qt Resource Editor已经是默认的了. 那就是q ...
- Pandas模块
前言: 最近公司有数据分析的任务,如果使用Python做数据分析,那么对Pandas模块的学习是必不可少的: 本篇文章基于Pandas 0.20.0版本 话不多说社会你根哥!开干! pip insta ...
- raid卡的结构示意图
raid卡的结构示意图,取自<大话存储>第124页 ROM:一般用FLash芯片做ROM,存放着初始化RAID卡必须的代码以及实现RAID功能所需的代码; XOR芯片:专门用来做RAID ...
- HTTP Basic和Digest认证介绍与计算
一.说明 web用户认证,最开始是get提交+把用户名密码存放在客户端的cookie中的形式:在意识到这样不安全之后逐渐演变成了post提交+把用户凭证放到了服务端的session中的形式(当然ses ...
- C# MethodInvoker委托的使用
一.MethodInvoker是什么? MethodInvoker 表示一个委托,该委托可以执行托管代码中声明为void且不接受任何参数的任何方法.在对控件的 invoke 方法进行调用时或需要一个简 ...
- 从零开始 —— Canvas(一)
从零开始-Canvas 1.颜色.样式和阴影 属性 a.fillStyle(设置或返回用于填充绘画的颜色.渐变或模式) 语法:context.fillStyle = color(颜色值) | grad ...