Thymeleaf学习

Thymeleaf简介

前两天学习springboot遇到了thymeleaf,本着不懂就学的原则,网上查资料了解了以下,整理了一些网上的大家整理的资料,做一下记录。
Thymeleaf(读音)是一个XML/XHTML/HTML5模板引擎,可用于Web与非Web环境中的应用开发。它是一个开源的Java库,基于Apache License 2.0许可,由Daniel Fernández创建,该作者还是Java加密库Jasypt的作者。
Thymeleaf提供了一个用于整合Spring MVC的可选模块,在应用开发中,你可以使用Thymeleaf来完全代替JSP或其他模板引擎,如Velocity、FreeMarker等。Thymeleaf的主要目标在于提供一种可被浏览器正确显示的、格式良好的模板创建方式,因此也可以用作静态建模。你可以使用它创建经过验证的XML与HTML模板。相对于编写逻辑或代码,开发者只需将标签属性添加到模板中即可。接下来,这些标签属性就会在DOM(文档对象模型)上执行预先制定好的逻辑。以上内容引用至这位大神的博客
示例模板(摘自官网):



  
    Good Thymes Virtual Grocery
    
    
  
   
    

Welcome to our grocery store!

Thymeleaf的优势

摘至https://blog.csdn.net/u011244202/article/details/54605165

  1. Thymeleaf 在有网络和无网络的环境下皆可运行,即它可以让美工在浏览器查看页面的静态效果,也可以让程序员在服务器查看带数据的动态页面效果。(当有数据返回到页面时,Thymeleaf 标签会动态地替换掉静态内容,使页面动态显示。)
  2. Thymeleaf 开箱即用的特性。(它提供标准和spring标准两种方言,可以直接套用模板实现JSTL、 OGNL表达式效果。)
  3. Thymeleaf 提供spring标准方言和一个与 SpringMVC 完美集成的可选模块,可以快速的实现表单绑定、属性编辑器、国际化等功能。

另外,Thymeleaf是一个XML/XHTML/HTML5模板引擎,可用于Web与非Web环境中的应用开发。它是一个开源的Java库,基于Apache License 2.0许可,由Daniel Fernández创建,该作者还是Java加密库Jasypt的作者。

SpringBoot引用Thymeleaf

  • 引入下面的依赖
  
            org.springframework.boot
            spring-boot-starter-thymeleaf
  
  • control层代码
package com.banana.sprintbootday1.Controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class HelloController {

    @RequestMapping("/demo2")
    public String demo1(Model map) {
        map.addAttribute("MyName","Fanco");
        return "index";
    }
}
  • index.html



    
    Title


Hello World

直接打开页面的话显示的是helloworld,如果启动项目访问的话,显示MyName的值。

Thymeleaf 的配置

thymeleaf可以在项目的application.properties中进行配置

# 是否开启模板缓存,默认true
spring.thymeleaf.cache=true 
# 检查模板位置是否存在
spring.thymeleaf.check-template-location=true 
# Content-Type value
spring.thymeleaf.content-type=text/html 
# 是否启用MVC-Thymeleaf视图
spring.thymeleaf.enabled=true 
# 模板编码
spring.thymeleaf.encoding=UTF-8 
# 应该从解析中排除的视图名称列表(用逗号分隔)
spring.thymeleaf.excluded-view-names= 
# 要应用于模板的模板模式。另请参见StandardTemplateModeHandlers。
spring.thymeleaf.mode=HTML5 
# 在链接网址时预先查看名称的前缀。
spring.thymeleaf.prefix=classpath:/templates/ 
# 链接网址时附加到视图名称的后缀。
spring.thymeleaf.suffix=.html
# 指定模板的解析顺序,默认为第一个.
spring.thymeleaf.template-resolver-order= 
# 指定使用模板的视图名,多个以逗号分隔
spring.thymeleaf.view-names= 

Thymeleaf的用法

文本、字面值和国际化文本

文本

文本需要th:text属性来设置。我们可以在文本元素中添加默认值,这样当Thymeleaf引擎处理失败的时候页面会显示默认值。${...}是变量表达式,将括号中的变量替换为其值。

你好

字面值

在th:text中我们可以使用各种字面值,下面列举如下。

  • 字符串字面值。如果需要连接多个字符串使用+即可。
默认值
  • 数字字面量。我们可以使用运算符计算数字的值。
2017
  • 布尔值字面量。

国际化文本

默认情况下,我们可以在与视图文件相同的目录下编写properties文件,然后使用消息语法#{home.welcome}来引用文件中的字符串。可以有多个属性文件,对应不同的区域,例如home_en.properties代表英文区域,home_es.properties代表西班牙区域。下面是一个示例属性文件。

home.welcome=你好

默认情况下Thymeleaf会在与视图相同的文件下寻找同名的属性文件来加载消息。我们也可以自定义消息解析器,用自己的策略从任何地方加载消息。

内插字符串

内插字符串可以将一个字符串中给定部分替换为实际的字符串,内插字符串使用|包括,在|中只能包括${}表达式,不能包括其他表达式



算术、比较和逻辑运算

thymeleaf支持常用的算术运算,如果使用除/或者取余%运算符的话,还可以使用div或mod代替。

对于比较和逻辑运算符使用gt(>),ge(>=),le(<=),not(!),eq(==),neq/ne(!=)

条件表达式

无操作标记

不进行任何操作

选择表达式(星号语法)

星号表达式和美元表达式的作用都是求变量的值。不过它们之间有一些区别,星号表达式作用于被选择的对象。被选择的对象需要使用th:object指定。下面是Thymeleaf的一个例子。

  

Name: Sebastian.

Surname: Pepper.

Nationality: Saturn.

等效于使用${..}。

Name: Sebastian.

Surname: Pepper.

Nationality: Saturn.

当存在选择对象的时候,我们可以使用美元表达式${#object}来访问选择对象,也可以同时使用星号表达式和美元表达式。选择表达式的主要作用是在表达式比较长例如${session.users.address.street.fullname}的时候,简化表达式。

选择块

条件选择块

在开发Web程序的时候, 很常见的需求就是根据某个值的真假,显示或隐藏某个HTML元素。这可以使用th:if="${exp}"实现。需要注意和JSTL中的不同,Thymeleaf会根据条件显示或隐藏包含th:if的整个标签块,而不仅是它的子标签块。

....

需要注意th:if的表达式不仅支持Java式的纯条件判断,还支持C语言式的真值判断,即当一个变量不为空或者整数不是0的时候,也认为是真值。另外还有一个th:unless执行和th:if相反的判断。

多重选择块

如果需要多重选择,可以使用th:switch。需要注意一旦有一个子条件匹配,Thymeleaf就不会继续检查其他条件了。如果需要提供默认值的话,可以这样写,th:case="*"

这是1

这是2

其他值

迭代块

有时候我们需要遍历一个数组中的元素。这可以使用th:each实现。在th:each中我们要指定迭代元素和被迭代集合。被迭代集合可以是:数组,任何实现了java.util.Iterable的对象,任何实现了java.util.Enumeration的对象,任何实现了java.util.Iterator的对象,任何实现了java.util.Map的对象。需要注意的是,和JSTL的标签不同,Thymeleaf会迭代包含的整个标签块,而不仅仅是它的子标签块。

      
        
        
        
      

Thymeleaf还提供了迭代状态变量来检测当前迭代的状态,只需要在th:each中声明iterStat即可。假如没有显式声明状态变量,Thymeleaf也会创建一个状态变量,名称是迭代元素添加后缀Stat。上面的代码中,Thymeleaf会创建一个名为userStat的状态变量。

      
        
        
        
      

状态变量包含以下属性;

  • index属性,以0开始的迭代元素索引。
  • count属性,以1开始的迭代元素索引。
  • size属性,迭代集合的总元素数。
  • iter属性,当前迭代元素。
  • even和odd两个布尔值,表明当前index的奇偶。
  • first和last两个布尔值,表明当前元素是否是第一个/最后一个。

删除代码段

以下是Thymeleaf的一个例子。我们可以使用th:remove来删除指定的部分,这在原型设计和调试的时候很有用。

 
    Mild Cinnamon
    1.99
    yes
    
      3 comment/s
      view
    
  

th:remove可接受的值有5个:

  • all: 移除标签和所有子元素
  • body: 移除所有子元素,保留标签
  • tag: 移除标签,保留子元素
  • all-but-first: 保留第一个子元素,移除所有其他
  • none : 什么也不做。这个值在动态求值的时候会有作用

以下内容来自于https://blog.csdn.net/u011054333/article/details/55260754,我只记录了比较常用的,要知道更多可以去这看,或者看官方文档。

更多详细内容建议参考官方文档https://www.thymeleaf.org/documentation.html

你可能感兴趣的:(Thymeleaf学习)