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入门的更多相关文章

  1. 学习小片段——springboot 错误处理

    一:先看看springboot默认的错误处理机制 springboot默认会判断是否是浏览器(http请求头Accept是否含有 text/html)来选择返回html错误页面或json错误信息 原因 ...

  2. .NET Core 学习资料精选:入门

    开源跨平台的.NET Core,还没上车的赶紧的,来不及解释了-- 本系列文章,主要分享一些.NET Core比较优秀的社区资料和微软官方资料.我进行了知识点归类,让大家可以更清晰的学习.NET Co ...

  3. 微信小程序开发入门教程

    做任何程序开发要首先找到其官方文档,微信小程序目前还在邀请内测阶段,目前官方放出了部分开发文档,经过笔者一天的查看和尝试,感觉文档并不全面,但是通过这些文档已经能够看出其大概面貌了.闲话不多说,我们先 ...

  4. WEB前端学习代码片段记录

    1.JS设计模式片段 Function.prototype.addMethod = function (name,fn) { this.prototype[name] = fn; return thi ...

  5. .Net Core ORM选择之路,哪个才适合你 通用查询类封装之Mongodb篇 Snowflake(雪花算法)的JavaScript实现 【开发记录】如何在B/S项目中使用中国天气的实时天气功能 【开发记录】微信小游戏开发入门——俄罗斯方块

    .Net Core ORM选择之路,哪个才适合你   因为老板的一句话公司项目需要迁移到.Net Core ,但是以前同事用的ORM不支持.Net Core 开发过程也遇到了各种坑,插入条数多了也特别 ...

  6. 学习《零基础入门学习Python》电子书PDF+笔记+课后题及答案

    初学python入门建议学习<零基础入门学习Python>.适合新手入门,很简单很易懂.前一半将语法,后一半讲了实际的应用. Python3入门必备,小甲鱼手把手教授Python,包含电子 ...

  7. 分布式学习系列【dubbo入门实践】

    分布式学习系列[dubbo入门实践] dubbo架构 组成部分:provider,consumer,registry,monitor: provider,consumer注册,订阅类似于消息队列的注册 ...

  8. [精品书单] C#/.NET 学习之路——从入门到放弃

    C#/.NET 学习之路--从入门到放弃 此系列只包含 C#/CLR 学习,不包含应用框架(ASP.NET , WPF , WCF 等)及架构设计学习书籍和资料. C# 入门 <C# 本质论&g ...

  9. Hadoop学习笔记(1) ——菜鸟入门

    Hadoop学习笔记(1) ——菜鸟入门 Hadoop是什么?先问一下百度吧: [百度百科]一个分布式系统基础架构,由Apache基金会所开发.用户可以在不了解分布式底层细节的情况下,开发分布式程序. ...

随机推荐

  1. JVM调优之JMeter使用(三)

    JMeter是Apache 下基于Java 的一款性能测试和压力测试工具.它基于Java 开发,可对HTTP 服务器和FTP服务器,甚至是数据库进行压力测试. 下载地址:http://jmeter.a ...

  2. 用node.js启动mock.js

    Node.js Node 是一个让 JavaScript 运行在服务端的开发平台,它让 JavaScript 成为与PHP.Python.Perl.Ruby 等服务端语言平起平坐的脚本语言.官网下载n ...

  3. OSGI框架

    面向Java的动态模型系统 OSGi服务平台提供在多种网络设备上无需重启的动态改变构造的功能.为了最小化耦合度和促使这些耦合度可管理,OSGi技术提供一种面向服务的架构,它能使这些组件动态地发现对方. ...

  4. sqlalchemy基础教程

    一.基本配置 连接数据库 外部连接数据库时,用于表名数据库身份的一般是一个URL.在sqlalchemy中将该URL包装到一个引擎中,利用这个引擎可以扩展出很多ORM中的对象. from sqlalc ...

  5. Oracle DB管理内存

    • 描述SGA 中的内存组件• 实施自动内存管理• 手动配置SGA 参数• 配置自动PGA 内存管理  内存管理:概览DBA 必须将内存管理视为其工作中至关重要的部分,因为:• 可用内存空间量有限• ...

  6. zzw原创_非root用户下安装nginx

    想自己安装nginx,又不相用到root用户. 非root用户下(本文为用户bdctool)来ngnix安装,要依赖pcre库.zlib库等, 1. 下载依赖包:下载地址 pcre(www.pcre. ...

  7. 备忘:移植ucos-III到stm32f103c8t6

    由于本人对linux系统内核这块比较感兴趣,下一份工作想做linux驱动相关的:于是最近一旦有空都在研究linux内核源码,面对linux内核这个庞然大物,越看越觉得不能太过急躁,且由于还要工作,只能 ...

  8. win10php环境变量配置(xampp环境)

    我的电脑--属性(右键)--高级系统设置--环境变量--系统变量--Path--编辑 新建两条变量: 一个是xampp文件下的php文件,例如 C:\xampp\php 一个是xampp文件下的php ...

  9. 分析Json/Xml的解析过程

    json和xml都是用来进行数据的传输和交换的,是目前用来传输数据用的最多的两种技术,下面我们分别来认识一下它们及其解析过程 一.json 1.json简介 JSON是一种基于文本的轻量级数据交换格式 ...

  10. Java面向对象编程思想

    面向对象三个特征:封装.继承.多态封装:    语法:属性私有化(private).提供相对应的get/set 的方法进行访问(public). 在set/get的方法中对属性的数据 做相对应的业务逻 ...