Thymeleaf模板引擎
Posted fantongxue
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Thymeleaf模板引擎相关的知识,希望对你有一定的参考价值。
目录
@(thymeleaf这样玩)
1.springboot直接引入
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId><br></dependency>
非springboot项目使用如下依赖:
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf</artifactId>
<version>2.1.4</version>
</dependency>
默认的模板映射路径是:src/main/resources/templates
springboot1.4之后,可以使用thymeleaf3来提高效率,并且解决标签闭合问题,配置方式:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- set thymeleaf version -->
<thymeleaf.version>3.0.0.RELEASE</thymeleaf.version>
<thymeleaf-layout-dialect.version>2.0.0</thymeleaf-layout-dialect.version>
<!--set java version-->
<java.version>1.8</java.version>
</properties>
2.配置thymeleaf视图解析器
这点与springMVC是相类似的:
#thymeleaf start
spring.thymeleaf.mode=html5
spring.thymeleaf.encoding=UTF-8
spring.thymeleaf.content-type=text/html
#开发时关闭缓存,不然没法看到实时页面
spring.thymeleaf.cache=false
#thymeleaf end
3.编写模板html
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>hello</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</head>
<body>
<!--/*@thymesVar id="name" type="java.lang.String"*/-->
<p th:text="'Hello!, ' + ${name} + '!'">3333</p>
</body>
</html>
选择变量表达式
<div th:object="${session.user}">
<p>Name: <span th:text="*{firstName}">Sebastian</span>.</p>
<p>Surname: <span th:text="*{lastName}">Pepper</span>.</p>
<p>Nationality: <span th:text={nationality}">Saturn</span>.</p>
</div>
等价于
<div>
<p>Name: <span th:text="${session.user.firstName}">Sebastian</span>.</p>
<p>Surname: <span th:text="${session.user.lastName}">Pepper</span>.</p>
<p>Nationality: <span th:text="${session.user.nationality}">Saturn</span>.</p>
</div>
链接表达式
<!-- Will produce 'http://localhost:8080/gtvg/order/details?orderId=3' (plus rewriting) -->
<a href="details.html" th:href="@{http://localhost:8080/gtvg/order/details(orderId=${o.id})}">view</a> <!-- Will produce '/gtvg/order/details?orderId=3' (plus rewriting) -->
<a href="details.html" th:href="@{/order/details(orderId=${o.id})}">view</a>
<a href="details.html" th:href="@{order/{orderId}/details(orderId=${o.id})}">Content路径,默认访问static下的order文件夹</a>
条件 if/unless
使用th:if和th:unless属性进行条件判断,th:unless于th:if恰好相反,只有表达式中的条件不成立,才会显示其内容。
<a th:href="@{/login}" th:unless=${session.user != null}>Login</a>
switch
<div th:switch="${user.role}">
<p th:case="'admin'">User is an administrator</p>
<p th:case="#{roles.manager}">User is a manager</p>
<p th:case="*">User is some other thing</p>
</div>
循环 通过th:each
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>hello</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</head>
<body>
<!-- 不存在则忽略,显示hello null!(可以通过默认值进行设置)-->
<p th:text="'Hello ' + (${name}?:'admin')">3333</p>
<table>
<tr>
<th>ID</th>
<th>NAME</th>
<th>AGE</th>
</tr>
<tr th:each="emp : ${empList}">
<td th:text="${emp.id}">1</td>
<td th:text="${emp.name}">海</td>
<td th:text="${emp.age}">18</td>
</tr>
</table>
</body>
</html>
下面是我在商城项目中遇到的thymeleaf的冷知识点,主要是thymeleaf,还有几点其他的,顺便总结一下
使用thymeleaf前提是
<html xmlns:th="www.thymeleaf.org">
Thymeleaf th:each 遍历格式如下
<table border="1">
<thead>
<tr>
<th>工号</th>
<th>姓名</th>
<th>生日</th>
<th>是否已婚</th>
<th>工资</th>
</tr>
</thead>
<tbody>
一定要谨记!!!!下面的userList一定得是后台controller通过把查到的list集合存储到了model中然后才转发到html页面的。
<!-- 遍历集合,如果被遍历的变量 userList 为 null 或者不存在,则不会进行遍历,也不报错-->
<tr th:each="user : ${userList}">
<!-- 将用户的主键 uId 存在在 name 属性中-->
<td th:text="${user.uId}" th:name="${user.uId}"></td>
<td th:text="${user.uName}"></td>
<!-- 使用dates对象格式化日期-->
<td th:text="${#dates.format(user.birthday, 'yyyy-MM-dd HH:mm')}"></td>
<!-- 三运运算判断是否已婚-->
<td th:text="${user.isMarry}?'是':'否'"></td>
<td th:text="${user.price}"></td>
</tr>
</tbody>
</table>
通过thymeleaf模板遍历Controller层传递来的数组对象,并通过超链接将对象的某个属性当作参数再传到Controller层,重点是后面的删除链接拿到参数
<!DOCTYPE html>
<!-- 引用thymeleaf模板-->
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<table>
<tr th:each="user : ${users}">
<td th:text="${user.userId}">1</td>
<td th:text="${user.userName}">yxc</td>
<td th:text="${user.userPwd}">123456</td>
<td th:text="${user.userEmail}">yes</td>
<!-- 用 / 打头, 会自动把上下文路径(比如 http://localhost:8888/demo) 路径加上去. -->
<td style="text-align: center" width="100px"><intput type="button" th:onclick="del([[${user.id}]]);">删除</intput></td>
</tr>
</table>
</body>
</html>
上传的图片回显
把图片上传的文件夹设置为静态资源,然后进行访问,这里的picpath我添加的信息其实是图片的名字,并不是路径
$.ajax({
url:"/demo/getPic",
data:{"kind":"男装"},
type:"post",
dataType:"json",
success:function (data) {
alert(JSON.stringify(data));
var path="D:/tempFiles/files/";
var str = "";
if (data != "") {
for (var i = 0; i < data.length; i++) {
str+= '<a href="/demo/buy" class="floor-item"><div class="item-img hot-img">[外链图片转存失败(img-HtyDtpRY-1562144284695)(https://mp.csdn.net/mdeditor/images/'+data[i].picpath+')]</div> <div class="price clearfix"><span class="pull-left cr fz16">' + data[i].price + '</span> <span class="pull-right c6">进货价</span></div> <div class="name ep" title="'+data[i].name+'">' + data[i].name + '</div></a>';
}
$("#nanzhuang").append(str);
}
}
});
thymeleaf标签之th:href的使用
如果是需要从model中取值的话,写法为
java th:href="@{${model中的name值}}"
java
有的时候我们不止需要从model中进行取值,还需写字符串与model中的值进行拼接,写法为
th:href="@{'字符串'+${model中的nam值}}"
获取到url路径的参数
var str=location.href;//获取url整条路径
var num=str.indexOf("=");//获取“=”之前的字符个数
var slice=str.slice(num+1);//截取多少个字符之后的字符串,从多少个开始截取
alert(slice);//获取到参数
以上是关于Thymeleaf模板引擎的主要内容,如果未能解决你的问题,请参考以下文章