1.Thymeleaf使用流程
Thymeleaf是一个Java模板引擎,支持html、xml、text、javascript、css、raw这几种模型。
- 使用Thymeleaf首先需要引入命名空间
<html xmlns:th="http://www.thymeleaf.org">
2. 引入依赖
<!--引入thymeleaf模板引擎 注意需要3.0以上的版本否则失效-->
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf-spring5</artifactId>
</dependency>
<dependency>
<groupId>org.thymeleaf.extras</groupId>
<artifactId>thymeleaf-extras-java8time</artifactId>
</dependency>
3.Spring Boot的Thymeleaf模板引擎默认访问src/main/resources/templates路径的文件夹,可以自行修改另外Thymeleaf默认的页面文件后缀是.html,需要通过Controller将数据传递到页面中,让页面进行动态展示。
@Controller
public class HelloController {
@RequestMapping("/index")
public String index(Model model){
List<Object> list = new ArrayList<Object>();
list.add("1");
model.addAttribute("msg","hello,springboot");
model.addAttribute("msgs","<h1>hello,springboot</h1>");
model.addAttribute("list",list);
return "index";
}
}
4.基本的使用方法
- Thymeleaf通过”@{}”来引用web静态资源,例如:
<script th:src="@{bootstrap/js/boostrap.min.js}"></script>
- 访问model模型中的数据,例如访问一个user对象的name属性
<div th:text="${msg}"></div>
<div th:utext="${msgs}"></div> // utext 开启自动拼接标签
- 数据迭代,例如迭代一个userlist集合
<tr th:each="user : ${userlist}">
<td th:text="${user.name}">tyrone</td>
<td th:text="${user.age}">18</td>
</tr>
逻辑处理
所有的页面模版都存在各种基础逻辑处理,例如:判断、循环处理操作。在 Thymeleaf 之中对于逻辑可以使用如下的一些运算符来完成,例如:and、or、关系比较(>、<、>=、<=、==、!=、lt、gt、le、ge、eq、ne)判断是不是为空:null:
<span th:if="${name} != null">不为空</span>
<span th:if="${name1} == null">为空</span>
- 判断是不是为空字符串: “”
<span th:if="${#strings.isEmpty(name1)}">空的</span>
- 判断是否相同:
<span th:if="${name} eq 'jack'">相同于jack,</span>
<span th:if="${name} eq 'ywj'">相同于ywj,</span>
<span th:if="${name} ne 'jack'">不相同于jack,</span>
- 不存在设置默认值:
<span th:text="${name2} ?: '默认值'"></span>
- 是否包含(分大小写):
<span th:if="${#strings.contains(name,'ez')}">包ez</span>
<span th:if="${#strings.contains(name,'y')}">包j</span>
${#strings.startsWith(name,'o')}
${#strings.endsWith(name, 'o')}
${#strings.indexOf(name,frag)}// 下标
${#strings.substring(name,3,5)}// 截取
${#strings.substringAfter(name,prefix)}// 从 prefix之后的一位开始截取到最后,比如 (ywj,y) = wj, 如果是(abccdefg,c) = cdefg//里面有2个c,取的是第一个c
${#strings.substringBefore(name,suffix)}// 同上,不过是往前截取
${#strings.replace(name,'las','ler')}// 替换
${#strings.prepend(str,prefix)}// 拼字字符串在str前面
${#strings.append(str,suffix)}// 和上面相反,接在后面
${#strings.toUpperCase(name)}
${#strings.toLowerCase(name)}
${#strings.trim(str)}
${#strings.length(str)}
${#strings.abbreviate(str,10)}// 我的理解是 str截取0-10位,后面的全部用…这个点代替,注意,最小是3位