JavaSpringboot学习(三)Thymeleaf、mybatis-plus
4.Thymeleaf
概念
Thymeleaf 是⼀个跟 FreeMarker 类似的模板引擎,它可以完全替代JSP 。相较与其他的模板引擎,它有如下特点:
动静结合:Thymeleaf 在有⽹络和⽆⽹络的环境下皆可运⾏,⽆⽹络显⽰静态内容,有⽹络⽤后台得到数据替换静态内容
与SpringBoot完美整合,springboot默认整合thymeleaf
4.1 ⼊门案例
编写接⼝
编写UserService,调⽤UserMapper的查询所有⽅法
@Service
public class UserService {
@Autowired
private UserDao userDao;
public List<User> queryAll() {
return this.userDao.selectAll();
}
}
编写⼀个controller,返回⼀些⽤户数据,放⼊模型中,等会在页⾯渲染编写⼀个controller,返回⼀些⽤户数据,放⼊模型中,等会在页⾯渲染
@Controller
public class UserController {
@Autowired
private UserService userService;
@RequestMapping("/all")
public String all(Model model) {
List<User> list = userService.findAll();
model.addAttribute("users", list);
// 返回模板名称(就是classpath:/templates/⽬录下的html⽂件名)
return "users";
}
}
引⼊启动器
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
SpringBoot会⾃动为Thymeleaf注册⼀个视图解析器:
与解析JSP的InternalViewResolver类似,Thymeleaf也会根据前缀和后缀来确定模板⽂件的位置:
默认前缀: classpath:/templates/
默认后缀: .html
所以如果我们返回视图: users ,会指向到 classpath:/templates/users.html
⼀般我们⽆需进⾏修改,默认即可。
静态页⾯
根据上⾯的⽂档介绍,模板默认放在classpath下的templates⽂件夹,我们新建⼀个html⽂件放⼊其中:
编写html模板,渲染模型中的数据:
注意,把html 的名称空间,改成: xmlns:th="" 会有语法提⽰
<!DOCTYPE html>
<html xmlns:th="">
<head>
<meta charset="UTF-8">
<title>⾸页</title>
<style type="text/css">
table {border-collapse: collapse; font-size: 14px; width: 80%; margin: auto}
table, th, td {border: 1px solid darkslategray;padding: 10px}
</style>
</head>
<body>
el表达式获取session中的值<div >
<span >欢迎光临!</span>
<hr/>
<table class="list">
<tr>
<th>id</th>
<th>姓名</th>
<th>⽤户名</th>
<th>年龄</th>
<th>性别</th>
<th>⽣⽇</th>
<th>备注</th>
<th>操作</th>
</tr>
<tr th:each="user, status : ${users}" th:object="${user}">
<td th:text="${user.id}">1</td>
<td th:text="*{name}">张三</td>
<td th:text="*{userName}">zhangsan</td>
<td th:text="${user.age}">20</td>
<td th:text="${user.sex} == 1 ? '男': '⼥'">男</td>
<td th:text="${#dates.format(user.birthday, 'yyyy-MM-dd')}">1980-02-30</td>
<td th:text="${}">1</td>
<td>
<a th:href="@{/delete(id=${user.id}, userName=* {userName})}">删除</a>
<a th:href="|/update/${user.id}|">修改</a>
<a th:href="'/approve/' + ${user.id}">审核</a>
</td>
</tr>
</table>
</div>
</body>
</html>
我们看到这⾥使⽤了以下语法:
${} :这个类似与el表达式,但其实是ognl的语法,⽐el表达式更加强⼤
th- 指令: th- 是利⽤了Html5中的⾃定义属性来实现的。如果不⽀持H5,可以⽤ data-th- 来代替
th:each :类似于 c:foreach 遍历集合,但是语法更加简洁
th:text :声明标签中的⽂本
例如 1 ,如果user.id有值,会覆盖默认的1
如果没有值,则会显⽰td中默认的1。这正是thymeleaf能够动静结合的原因,模板解析失败不影响页⾯的显⽰效果,因为
会显⽰默认值!
测试
接下来,我们打开页⾯测试⼀下:
模板缓存
Thymeleaf会在第⼀次对模板解析之后进⾏缓存,极⼤的提⾼了并发处理能⼒。但是这给我们开发带来了不便,修改页⾯后并不会⽴刻看到效果,我们开发阶段可以关掉缓存使⽤:
# 开发阶段关闭thymeleaf的模板缓存
spring.thymeleaf.cache=false
注意:
在Idea中,我们需要在修改页⾯后按快捷键: Ctrl + Shift + F9 对项⽬进⾏rebuild才可以。
我们可以修改页⾯,测试⼀下。
4.2 thymeleaf详解
表达式
它们分为三类
1. 变量表达式
2. 选择或星号表达式
3. URL表达式
变量表达式
变量表达式即OGNL表达式或Spring EL表达式(在Spring中⽤来获取model attribute的数据)。如下所⽰:${session.user.name}
它们将以HTML标签的⼀个属性来表⽰:
<h5>表达式</h5>
<span>${text}</span>
<span th:text="${text}">你好 thymleaf</span>
选择(星号)表达式
选择表达式很像变量表达式,不过它们⽤⼀个预先选择的对象来代替上下⽂变量容器(map)来执⾏,如下: * {customer.name}被指定的object由th:object属性定义:
users.html
<tr th:each="user : ${users}" th:object="${user}">
<td th:text="${user.id}">1</td>
<td th:text="*{name}">张三</td>
<td th:text="*{userName}">zhangsan</td>
....
URL表达式
URL表达式指的是把⼀个有⽤的上下⽂或回话信息添加到URL,这个过程经常被叫做URL重写。 @{/order/list}
URL还可以设置参数: @{/order/details(id=${orderId}, name=*{name})}
相对路径: @{../documents/report}
让我们看这些表达式:
<form th:action="@{/createOrder}">
<a href="main.html" th:href="@{/main}">
url表达式
<a th:href="@{/delete(id=${user.id}, userName=*{userName})}">删除</a>
⽂本替换
<a th:href="|/update/${user.id}|">修改</a>
字符串拼接
<a th:href="'/approve/' + ${user.id}">审核</a>
表达式常见⽤法
字⾯(Literals)
⽂本⽂字(Text literals): 'one text', 'Another one!',…
数字⽂本(Number literals): 0, 34, 3.0, 12.3,…
布尔⽂本(Boolean literals): true, false
空(Null literal): null
⽂字标记(Literal tokens): one, sometext, main,…
⽂本操作(Text operations)
字符串连接(String concatenation): +
⽂本替换(Literal substitutions): |The name is ${name}|
算术运算(Arithmetic operations)
⼆元运算符(Binary operators): +, -, *, /, %
减号(单⽬运算符)Minus sign (unary operator): -
布尔操作(Boolean operations)
⼆元运算符(Binary operators): and, or
布尔否定(⼀元运算符)Boolean negation (unary operator): !, not
⽐较和等价(Comparisons and equality)
⽐较(Comparators): >, <, >=, <= (gt, lt, ge, le)
等值运算符(Equality operators): ==, != (eq, ne)
条件运算符(Conditional operators)
If-then: (if) ? (then)
If-then-else: (if) ? (then) : (else)
Default: (value) ?: (defaultvalue)
常⽤th标签
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论