七、视图技术Thymeleaf
- Thymeleaf是一个表现层的模板引擎,一般被使用在Web环境中,它可以处理HTML、XML、JS等文档,简单来说,它可以将JSP作为Java Web应用的表现层,有能力展示与处理数据。
- 这样,同一个模板文件,既可以使用浏览器直接打开,也可以放到服务器中用来显示数据,并且样式之间基本上不会存在差异,因此界面设计人员与程序设计人员可以使用同一个模板文件,来查看静态与动态数据的效果。
- Thymeleaf作为视图展示模型数据,用于和用户交互操作。JSP的代替技术。比较适合做管理系统,是一种易于学习、掌握的。
7.1表达式
- 表达式用于在页面展示数据的,有多种表达式语法,最常用的是变量表达式、链接表达式。
表达式 | 作用 | 例子 |
---|---|---|
${…} | 变量表达式,可用于获取后台传过来的值 | 中国 |
@{…} | 链接网址表达式 | 链接表达式,传递参数 |
1.在static/main.html中创建首页
- 静态资源默认放在static目录,SpringBoot按约定可直接访问。main.html就是普通的HTML文件。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div style="margin-left: 200px">
<h3>学习Thymeleaf</h3>
<a href="expression">1.使用表达式</a>
<a href="link">2.链接表达式</a>
</div>
</body>
</html>
2.创建Controller,提供数据给页面
@Controller
public class ThymeleafController {
//表达式,方法的返回值表示视图,一个xxx.html页面
@GetMapping("/expression")
public String exp(Model model) {
//model中的数据,最后放到request作用域的。
model.addAttribute("name", "张三");
model.addAttribute("address", "河南");
return "exp";
}
//链接表达式
@GetMapping("/link")
public String link(Integer id, String name, Model model) {
model.addAttribute("id", id);
model.addAttribute("myname", name);
return "link";
}
}
3.templates/目录下创建Thymeleaf的文件
- exp.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h3>表达式</h3>
<div th:text="${name}"></div>
<div th:text="${address}"></div>
<br/><br/><br/>
<h3>链接表达式</h3>
<a th:href="@{http://www.baidu.com}">链接到百度</a><br/>
<a th:href="@{/link}">链接到link地址,无参数</a><br/>
<a th:href="@{/link(id=111,name=lisi)}">链接表达式,传递参数</a>
</body>
</html>
- link.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h3>表达式</h3>
<div th:text="${id}"></div>
<div th:text="${myname}"></div>
</body>
</html>
7.2if-for
- Thymeleaf同样支持if、for语句的使用。
表达式 | 作用 | 例子 |
---|---|---|
th:if=“boolean 表达式” | th:if当条件满足时,显示代码片段。条件常用boolean表示,true满足,反之不满足。 |
10大于2
|
th:each处理循环,类似jstl中的<c:foreach> | ||
1.main.html
<a href="if-for">3.if和for</a>
2.创建UserVO
@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserVO {
private Integer id;
private String name;
private Integer age;
}
3.创建控制器方法
//if,for
@GetMapping("/if-for")
public String ifFor(Model model) {
model.addAttribute("login", true);
UserVO user = new UserVO();
user.setId(10);
user.setName("张三");
user.setAge(20);
model.addAttribute("user", user);
//创建List集合
UserVO user1 = new UserVO(11, "李四", 21);
UserVO user2 = new UserVO(12, "王五", 22);
ArrayList<UserVO> users = new ArrayList<>();
users.add(user1);
users.add(user2);
model.addAttribute("users", users);
return "base";
}
4.创建base.html模板页面
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h3>if</h3>
<div th:if="10>2">10大于2</div>
<div th:if="${login}">用户已经登录</div>
<div th:if="${user.age>18}">用户成年了</div>
<br/>
<h3>for</h3>
<table border="1px">
<tr>
<th>id</th>
<th>name</th>
<th>age</th>
</tr>
<tr th:each="u:${users}">
<td th:text="${u.id}"></td>
<td th:text="${u.name}"></td>
<td th:text="${u.age}"></td>
</tr>
</table>
</body>
</html>
5.浏览器访问