Thymeleaf入门

Thymeleaf是一个模板框架,Spring选择它作为默认模板方案

举个例子:

在这里插入图片描述
上述图片通过模板引擎,可以把java对象数据+模板页面动态的渲染出一个真实的HTML页面

初始化Thymeleaf

添加Maven依赖

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

数据传递

只需要在方法参数引入一个Model对象,通过这个Model对象传递数据到页面当中

@Controller
public class SongListControl {

  @Autowired
  private SongListService songListService;

  @RequestMapping("/songlist")
  public String index(@RequestParam("id")String id,Model model){

    SongList songList = songListService.get(id);
    //传递歌单对象到模板当中
    //第一个 songList 是模板中使用的变量名
    // 第二个 songList 是当前的对象实例
    model.addAttribute("songList",songList);

    return "songList";
  }
}

模板文件

Spring MVC中对于模板文件是有固定存放的位置,放在src/main/resources/templates所以上面的return会去查找src/main/resources/templates/songList.html系统会自动匹配后缀,所以不需要添加后缀,文件的内容:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <link rel="stylesheet" href="/css/songList.css" />
    <title>豆瓣歌单</title>
  </head>
  <body>
    <h1 th:text="${songList.name}"></h1>
  </body>
</html>

Thymeleaf 变量

模板变量

th:text这个属性就是Thymeleaf自定义的HTML标签属性,th是Thymeleaf的缩写,语法的作用就是会动态替换掉html标签的内部内容

<span th:text="${msg}">Hello</span>

这里执行的结果就是用msg变量值替换span标签的Hello字符串,th属性内的${变量名}这个语法是固定的,调用变量需要先设置变量到模板上下文中去,再使用model.addAttribute("msg",str);就可以完成上下文变量设置.

import org.springframework.ui.Model;

@Controller
public class DemoControl {

  @RequestMapping("/demo")
  public String index(Model model){
    String str = "你好";
    model.addAttribute("msg",str);
    return "demo";
  }
}
  • 第一个参数设置的就是上下文变量名
  • 第二个参数设置的是变量值

如果对象包含对象,可以使用.一直点出来,前提是对象时POJO类

Thymeleaf 循环语句

th:each代表的就是循环语句

<ul th:each="song : ${songs}">
  <li th:text="${song.name}">歌曲名称</li>
</ul>
  • ${songs}是模板上下文中获取songs这个变量
  • song是${songs}变量遍历后的每一个对象
  • ${song.name}就可以读取遍历中歌曲的名称

打印列表的索引值

<ul th:each="song,it: ${songs}">
  <li>
    <span th:text="${it.count}"></span>
    <span th:text="${song.name}"></span>
  </li>
</ul>
  • it.index
    迭代对象的index从0开始
  • it.count
    迭代对象的index从1开始
  • it.size
    迭代对象的大小
  • it.even/odd
    布尔值当前循环是否是偶数/奇数(从0开始)
  • it.first
    布尔值,当前循环是否是第一个
  • it.last
    布尔值,当前循环是否是最后后一个

Thymeleaf 表达式

主要用于两种场景

  • 字符串处理
  • 数据转化

字符串处理

需要使用''包围住文本,把文本变成java字符串,然后通过+拼接如:

<span th:text="'00:00/'+${totalTime}"></span>

字符串拼接优化:
可以使用|包围住字符串,如:

<span th:text="|00:00/${totalTime}|"></span>

数据转化

Thymeleaf默认集成了大量的工具类可以方便的进行数据转化,一般用的最多的是dates

变量使用的是${变量名} ,工具类使用的是#{工具类}

一般使用dates/temporals用于处理日期类型到字符串的显示比如显示年月日

<p th:text="${#dates.format(dateVar, 'yyyy-MM-dd')}"></p>
<p th:text="${#dates.format(dateVar, 'yyyy年MM月dd日')}"></p>

#strings字符串处理

  • ${#strings.toUpperCase(name)}

把字符串改成大写

  • ${#strings.toLowerCase(name)}

把字符串改成小写

  • {#strings.arrayJoin(array,',')}

把字符串数组合并成一个字符串,并以,连接

  • ${#strings.arraySplit(str,',')}

把字符串分隔成一个数组,并以,作分隔符,比如a,b执行后变成[“a”,“b”]

  • ${#strings.trim(str)}

去掉空格

  • ${#strings.length(str)}
  • ${#strings.equals(str1,str2)}
  • ${#strings.equalsIgnoreCase(str1,str2)}

这些与java的String类操作一样

内联表达式

可以直接把变量写在HTML中:

<span>Hello [[${msg}]]</span>

[[变量]]就是内联表达式,支持我们直接在HTML中调用变量
执行日期函数:

<p>[[ ${#dates.format(dateVar, 'yyyy-MM-dd')} ]]</p>
<p>[[${#dates.format(dateVar, 'yyyy年MM月dd日')}]]</p>

<p>[[${#dates.format(dateVar, 'yyyy-MM-dd HH:mm:ss')}]]</p>
<p>[[${#dates.format(dateVar, 'yyyy年MM月dd日 HH时mm分ss秒')}]]</p>

[[]]只是用于代替th:text,不是代替所有的th:标签

Thymeleaf 条件语句

同样也是th:开头的语句,这次为th:if,只有if表达式为true的情况下才回执行渲染:

<span th:if="${user.sex == 'male'}"></span>

还可以使用th:unless代表的是否定条件,这个语句与if是相反的,代表的是sex不是male才回执行渲染

<span th:unless="${user.sex == 'male'}"></span>

strings 逻辑判断

isEmpty检查字符串是否为空(或者为null)

<p th:if="${#strings.isEmpty(str1)}">String</p>

contains检查字符串变量是否包含片段

<!--检查name有没有abc-->
${#strings.contains(name,'abc')}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-irony-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值