引入依赖
org.springframework.boot
spring-boot-starter-thymeleaf
org.hibernate.validator
hibernate-validator
6.0.18.Final
org.springframework.boot
spring-boot-starter-web
org.projectlombok
lombok
1.18.12
application.yml
spring:
thymeleaf:
cache: false # 禁用缓存(建议开发关闭,生产环境开启)
prefix: classpath:/templates/ # 配置静态模板引擎的位置
suffix: .html # 配置后缀名称
UserController
package com.interceptor.testinterceptor.controller;
import com.interceptor.testinterceptor.entity.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import javax.validation.Valid;
import java.util.*;
@Controller
@RequestMapping("user")
public class UserController {
@GetMapping("show")
public String test(Model model) {
model.addAttribute("data","模板数据");
return "show";
}
@GetMapping("user")
public ModelAndView user() {
ModelAndView mv = new ModelAndView();
mv.setViewName("variable");
User user = new User();
user.setId(3430L);
user.setName("小雪");
user.setAge(30);
mv.addObject("user",user);
return mv;
}
@GetMapping("add")
public String add() {
return "form";
}
@GetMapping("js")
public String js(ModelMap modelMap) {
modelMap.put("data","js中获取值");
return "js";
}
@PostMapping("save")
public String save(@Valid User user, BindingResult result, ModelMap modelMap) {
//System.out.println(result.getAllErrors().size());
//result.getFieldErrors().stream().forEach(n-> System.out.println(n.getField()+","+n.getDefaultMessage()));
if (result.hasErrors()) {
result.getFieldErrors().stream().forEach(n-> modelMap.put(n.getField(),n.getDefaultMessage()));
modelMap.remove("user");
} else {
modelMap.put("user", user);
}
return "form";
}
@GetMapping("assembly")
public String assembly(Model model) {
// 创建List集合
List userList = Arrays.asList(
new User(10001L,"王五",43),
new User(10002L,"张柳",20),
new User(10003L,"骑闪",24),
new User(10004L,"刘昂",64)
);
// 创建Map集合
Map userMap = new HashMap<>();
userMap.put(40001, new User(30001L,"王五",43));
userMap.put(40002, new User(30002L,"五阿哥",54));
userMap.put(40003, new User(30003L,"砌墙图",14));
// 创建复杂集合
// 创建复杂集合List->Map->List->User
List>> mapList = new ArrayList<>();
for (int i = 0; i < 2; i++) {
Map> map = new HashMap<>();
for (int i1 = 0; i1 < 2; i1++) {
List users = new ArrayList<>();
for (int i2 = 0; i2 < 3; i2++) {
User user = new User(i2 + 11L, "张三" + i2, 32 + i);
users.add(user);
}
map.put(i1+1, users);
}
mapList.add(map);
}
model.addAttribute("users", userList);
model.addAttribute("userMap", userMap);
model.addAttribute("mapList", mapList);
return "assembly";
}
}
User
package com.interceptor.testinterceptor.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.validator.constraints.Range;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
@NotNull(message="ID不能为空")
private Long id;
@Size(max = 15,min = 6,message = "名字长度必须为{min}~{max}之间")
private String name;
@Range(min = 18,max = 80,message = "年龄必须在{min}~{max}之间")
@NotNull(message = "年龄不能为空")
private Integer age;
}
assembly.html
集合处理
List集合
编号:
姓名:
年龄:
Map集合
行号:
编号:
姓名:
年龄:
List->map-list-user复杂集合的变量
编号:
姓名:
年龄:
有小孩了吗?
谈朋友了吗?
111
112
113
------------------------------------------------
form.html
表单元素
添加的数据
编号:
姓名:
年龄:
js.html
JS相关
简单引入
内敛标签
th:inline
数据:[[${data}]]
外部数据:[[${data}]]
内敛脚本:th:javascript
show.html
简单应用
variable.html
变量表达式
对象变量
标准变量表达式${}【推荐使用】
编号:
姓名:
年龄:
选择变量表达式*{}
编号:
姓名:
年龄:
混合表达式*{} 【建议不使用】
编号:
姓名:
年龄:
URL路径变量
绝对路径@{.....}
跳转到新浪
访问初始主页
相对路径@{.....}
访问初始主页->相对路径
标准变量页面->相对路径
相对路径@{.....} 带参数
URL带一个参数
URL带多个参数
RESTful方式
RESTful方式->占位符替换[针对单个id处理]
获取页面路径