020-springboot-thymeleaf-property
pom.xml中应该有以下两个依赖
<dependency>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
dependency>
package com.zzy.springboot.web;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class PropertyController {
@RequestMapping(value = "/index")
public String index(Model model){
model.addAttribute("data", "thymeleaf的常用属性");
return "index";
}
}
DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Titletitle>
head>
<body>
<h1 th:text="${data}">h1>
body>
html>
th:action 但是定义后台空值器的路径,
类似于<form>表单表球按中的action属性
主要给URL表达式获取动态变量
<h1>th:action属性的使用h1>
<h2>请求路径中需要动态获取变量数据时,必须添加th:前缀h2>
<form th:action="@{
'/user/login/?id='+${user.id}}">form>
<h2>以下两种方式获取不到用户 idh2>
<form action="'/user/login?id='+${user.id}">form>
<form action="/user/login"+${user.id}>form>
/**
* 测试环境搭建的方法
* 侧首th:action属性的使用
* @param model
* @return
*/
@RequestMapping(value = "/index")
public String index(Model model){
model.addAttribute("data", "thymeleaf的常用属性");
User user = new User();
user.setId(1);
user.setName("詹姆斯");
user.setPhone("23");
user.setAdress("洛杉矶");
model.addAttribute("user", user);
return "index";
}
http://localhost:8020/index
因为我们的thymeleaf是以html为载体的,所以html不认识${}语法。
请求的流程是:发送请求给服务器,服务器接收到请求之后,处理请求,跳转到指定的静态html页面。
在服务端,thymeleaf魔板引擎会按照其语法,对动态数据进行处理,所以如果要是th开头,模板引擎能够识别,会在服务器端进行处理,获取数据,如果没有以th开头,那么thymeleaf模板引擎不会处理,直接就返回给客户端了
th:method:是用来设置请求方法的类型
<h1>th:method属性的使用h1>
<form th:action="@{/login}" th:method="post">...post方式提交form>
th:gref: 是用来定义超链接,主要结合URL表达式,获取动态变量
<h1>th:href属性的使用h1>
<a href="http://www.baidu.com">传统方式:超链接百度a>
<a th:href="'http://www.baidu.com?id=' + ${user.id}">th:href 链接a>
th:src :用于外部资源的引入,
比如:<script>标签的src属性,
<img>标签的src属性,常与路径表达式@{
}结合使用,
springboot静态资源都放到了static目录下,
在static目录下的内容,写路径时不需要写上static
<h1>th:src属性的使用h1>
<script src="/static/jquery-3.6.0.min.js">script>
<script type="text/javascript" th:src="@{/jquery-3.6.0.min.js}">script>
<script>
$(function () {
alert("引入js")
});
script>
http://localhost:8020/index
th:id :类似 html 标签中的 id 属性
th:name:设置名称
<h1>th:id th:name属性的使用h1>
<form th:action="@{/submit}" th:method="post">
用户编号:<input type="text" th:id="id" th:name="id"><br>
用户名称:<input type="text" th:id="name" th:name="username"><br>
提交:<input type="submit" value="提交">
form>
/**
* th:id 和 th:name属性
* @param id
* @param username
* @return
*/
@PostMapping(value = "/submit")
@ResponseBody
public String submit(Integer id,String username){
return "用户编号是:"+id+"用户名称是:"+username;
}
http://localhost:8020/index
类似HTNL中的value属性,能对元素的value属性进行赋值
< input type=“hidden” id=“userId” name=“userId” value="${user.id}" >
<h1>th:value属性的使用h1>
<input type="hidden" id="userId" name="userId" th:value="${user.id}">
用于给HTML中的元素的属性赋值,好处是给html中没有定义的属性赋值
<h1>th:attr属性的使用h1>
<span tom="${user.name}">span><br>
<span th:attr="tom=${user.name}">span>
用于文本的显示,该属性显示的文本在标签体中,
如果是文本框,则数据会在文本框外显示
如果想要显示在文本框内,则使用th:value属性
<h1>th:text属性的使用h1>
<input type="text" id="uAdd" name="uAddress" th:text="${user.adress}">
用于数据对象的绑定
通常用于选择变量表达式(星号表达式)
点击事件
<h1>th:onclick属性的使用h1>
<button th:onclick="'getId('+${user.id}+')'">用户编号button>
<button th:onclick="getName([[${user.name}]])">用户姓名button>
<script type="text/javascript">
function getId(id) {
console.log(id);
};
function getName(name) {
console.log(name);
}
script>
设置样式
这个属性非常常用,比兔后台传递一个对象集合,可以使用此属性进行遍历输出,与JSTL中的
此属性可以遍历集合,也可以遍历数组和map
package com.zzy.springboot.web;
import com.zzy.springboot.pojo.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.ArrayList;
import java.util.List;
@Controller
public class EachUserController {
@RequestMapping(value = "/each/list")
public String eachList(Model model){
List<User> userlist = new ArrayList<>();
for (int i=0;i<10;i++){
User user = new User();
user.setId(100+i);
user.setName("tom"+i);
user.setPhone("95533"+i);
user.setPhone("石景山"+i);
userlist.add(user);
}
model.addAttribute("userlist", userlist);
return "eachListUser";
}
}
DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Titletitle>
head>
<body>
<H1>th:each属性遍历list集合H1>
<div th:each="user,userStst:${userlist}">
<span th:text="${user.id}">span>
<span th:text="${user.name}">span>
<span th:text="${user.phone}">span>
<span th:text="${user.adress}">span>
<span th:text="${userStst.count}">span>
<span th:text="${userStst.index}">span>
div>
body>
html>
< div th:each=“user,userStst:${userList}” >
user
定义变量,用于接收遍历${userList}集合中的一个数据
userStat
${userList} 循环体的信息
其中 user 及 iterStat 自己可以随便取名
iterStat
是循环体的信息,通过该变量可以获取如下信息
http://localhost:8020/each/list
/**
* th:each遍历map集合
* @param model
* @return
*/
@RequestMapping(value = "/each/map")
public String eachMap(Model model){
Map<Object,Object> userMaps = new HashMap<>();
for (int i=0;i<10;i++){
User user = new User();
user.setId(200+i);
user.setName("亚当斯"+i);
user.setPhone("12号"+i);
user.setAdress("俄克拉荷马");
userMaps.put(i, user);
}
model.addAttribute("userMaps", userMaps);
return "eachMapUser";
}
DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Titletitle>
head>
<body>
<h1>th:each遍历Map集合h1>
<div th:each="userMap,userMapStat:${userMaps}">
<span th:text="${userMapStat.count}">span>
<span th:text="${userMapStat.index}">span>
<span th:text="${userMap.key}">span>
<span th:text="${userMap.value}">span>
<span th:text="${userMap.value.id}">span>
<span th:text="${userMap.value.name}">span>
<span th:text="${userMap.value.phone}">span>
<span th:text="${userMap.value.adress}">span>
div>
body>
html>
http://localhost:8020/each/map
th:each=“userMap,userMapStat:${userMaps}” ,
/**
* th:each属性遍历array数组
* @param model
* @return
*/
@RequestMapping(value = "/each/array")
public String eachArray(Model model){
User[] userArrays = new User[10];
for (int i=0;i<10;i++){
User user = new User();
user.setId(300+i);
user.setName("哈里斯"+i);
user.setPhone("20"+i);
user.setAdress("布鲁克林篮网"+i);
userArrays[i] =user;
}
model.addAttribute("userArrays",userArrays);
return "userArraysUser";
}
DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Titletitle>
head>
<body>
<h1>th:each遍历数组h1>
<div th:each="user,userStat:${userArrays}">
<span th:text="${user.id}">span>
<span th:text="${user.name}">span>
<span th:text="${user.phone}">span>
<span th:text="${user.adress}">span>
div>
body>
html>
http://localhost:8020/each/array
/**
* th:each属性遍历复杂几何
* list--map--list--user
* @param model
* @return
*/
@RequestMapping(value = "/each/all")
public String eachAll(Model model){
List<Map<Integer,List<User>>> myList = new ArrayList<>();
for (int i=0;i<2;i++){
Map<Integer,List<User>> myMap = new HashMap<>();
for (int j=0;j<2;j++){
List<User> userList = new ArrayList<>();
for (int k=0;k<5;k++){
User user = new User();
user.setId(888+k);
user.setName("恩比德"+k);
user.setPhone("21"+k);
user.setAdress("费城"+k);
userList.add(user);
}
myMap.put(j, userList);
}
myList.add(myMap);
}
model.addAttribute("myList", myList);
return "eachAllUser";
}
DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Titletitle>
head>
<body>
<h1>th:each属性遍历复杂集合h1>
<div th:each="myListMap,listMapStst:${myList}">
<div th:each="mylistMapObj:${myListMap}">
map集合key:<span th:text="${mylistMapObj.key}">span>
<div th:each="mylistMapObjList:${mylistMapObj.value}">
<span th:text="${mylistMapObjList.id}">span>
<span th:text="${mylistMapObjList.name}">span>
<span th:text="${mylistMapObjList.phone}">span>
<span th:text="${mylistMapObjList.adress}">span>
div>
div>
div>
body>
html>
http://localhost:8020/each/all
/**
* th:if unless switch case属性的使用
* @param request
* @param model
* @return
*/
@RequestMapping(value = "/condition")
public String ifUnlessSwitch(HttpServletRequest request,Model model){
model.addAttribute("sex",1);
model.addAttribute("flag", true);
model.addAttribute("state", 1);
return "ifUnlessSwitch";
}
DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Titletitle>
head>
<body>
<h1>th:if用法:如果满足条件执行,否则不执行h1>
<div th:if="${sex eq 1}">
男
div>
<div th:if="${sex eq 0}">
女
div>
<h1>th:unless用法:与th:if用法相反,即条件判断取反h1>
<div th:unless="${sex ne 1}">
男
div>
<h1>th:switch/th:case 的用法h1>
<div th:switch="${state}">
<span th:case="0">产品0span>
<span th:case="1">产品1span>
<span th:case="*">没有此产品span>
div>
body>
html>
http://localhost:8020/condition
/**
* th:inline内敛文本使用
* @param model
* @return
*/
@RequestMapping(value = "/inline")
public String inline(Model model){
User user = new User();
user.setId(47);
user.setName("AK47");
user.setPhone("47");
user.setAdress("RUS");
model.addAttribute("user", user);
return "inline";
}
DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>内敛文本title>
head>
<body>
<h1>标准变量表达式获取数据h1>
<div>
用户编号:<span th:text="${user.id}">span><br>
用户名称:<span th:text="${user.name}">span><br>
用户电话:<span th:text="${user.phone}">span><br>
用户地址:<span th:text="${user.adress}">span>
div>
<h1>内敛文本获取数据 th:inline="text"h1>
<div th:inline="text">
<span>[[${user.id}]]span><br>
<span>[[${user.name}]]span><br>
<span>[[${user.phone}]]span><br>
<span>[[${user.adress}]]span><br>
div>
body>
html>
-注意:一般我们将 th:inline="text"放到标签中
http://localhost:8020/inline
th:inline=”javascript”在 js 代码中获取后台的动态数据
<h1>内敛脚本动态获取数据 th:inline="javascript"h1>
<button th:onclick="showdata()">展示数据button>
<script type = "text/javascript" data-th-inline="javascript">
function showdata() {
alert([[${
user.name}]]);
}
script>
http://localhost:8020/inline