官方手册:https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html
内置对象可以在模板中直接使用
#request表示HttpServletRequest对象
#session表示HttpSession对象
session表HttpSession对象,是#session的简单表达方式
举例,创建一个新的Springboot项目,添加Thymeleaf和web依赖
在static下创建index页面
内置对象,工具类
内置对象
在java目录下创建controller类
package com.ys.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
@Controller
public class ZController {
@GetMapping("/UrlRequest")
public String UrlRequest(HttpServletRequest request, HttpSession session){
request.setAttribute("requestData","request作用域");
request.getSession().setAttribute("sessionData","session作用域");
//直接使用session
session.setAttribute("s","直接使用session");
return "UrlRequest";
}
}
在templates下创建页面
#request
#request表示HttpServletRequest对象
获取作用域中的数据
request内置方法演示
getRequestURL=
getRequestURI=
getQueryString=
getContextPath=
getServerName=
getServerPort=
session内置方法演示
getId=
查看结果
如果在编写页面时,没有智能提示语法和方法,可以按照以下步骤进行解决
注意:使用此方法改变后,部分自定义的变量名可能会显示无法识别报错,但是不影响数据的输出和页面的显示
在插件中下载
右键点击编写的页面,点击红框选择的按钮
官方手册:Tutorial: Using Thymeleaf
#dates:java.util.Data对象的实用方法,
#set:set的实用方法
#maps:map的实用方法
#aggregates:对数组或集合创建聚合的实用方法
null处理
创建实体类
package com.ys.pojo;
public class Dog {
private String name;
public Dog() {
}
public Dog(String name) {
this.name = name;
}
@Override
public String toString() {
return "Dog{" +
"name='" + name + '\'' +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package com.ys.pojo;
public class Cat {
private String name;
public Cat(String name) {
this.name = name;
}
public Cat() {
}
@Override
public String toString() {
return "Cat{" +
"name='" + name + '\'' +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package com.ys.pojo;
public class Zoo {
private Cat cat;
private Dog dog;
@Override
public String toString() {
return "Zoo{" +
"cat=" + cat +
", dog=" + dog +
'}';
}
public Cat getCat() {
return cat;
}
public void setCat(Cat cat) {
this.cat = cat;
}
public Dog getDog() {
return dog;
}
public void setDog(Dog dog) {
this.dog = dog;
}
public Zoo() {
}
public Zoo(Cat cat, Dog dog) {
this.cat = cat;
this.dog = dog;
}
}
编写index页面
内置对象,工具类
内置对象
内置工具类对象
编写controller
package com.ys.controller;
import com.ys.pojo.Cat;
import com.ys.pojo.Dog;
import com.ys.pojo.Zoo;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
@Controller
public class ZooController {
// 内置的工具类对象
@GetMapping("/Zoo")
public String Zoo(Model model){
model.addAttribute("date",new Date());
model.addAttribute("number","84913.259");
model.addAttribute("string","ysJavaHelloWorld");
// 使用Arrays工具类生成list
List list= Arrays.asList("a","b","c");
model.addAttribute("list",list);
Zoo zoo=new Zoo();
Cat cat=new Cat();
cat.setName("短腿");
Dog dog =new Dog();
dog.setName("中华田园犬");
zoo.setCat(cat);
zoo.setDog(dog);
model.addAttribute("zoo",zoo);
return "Zoo";
}
}
编写页面
Title
操作日期类对象的工具类 #dates
操作数字的工具类 #numbers
操作字符串的工具类 #strings
操作list的工具类 #lists
空值 null
模板的作用就是代码的复用,减少重复代码的工作量
定义模板的语法 :th:fragment="自定义模板名">
引用模板的语法:~{templatename : : selector} 或 templatename : : selector
templatename:模板所在的文件名称
selector:自定义的模板名称
对于使用模板:包含模板(th:include),插入模板(th:insert)
在index上添加链接
内置对象,工具类
内置对象
内置工具类对象
自定义模板
编写自定义的模板页面
模板
我的来自模板的类容
我存在于Fragment.html页面
编写controller
package com.ys.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
@Controller
public class ZController {
@GetMapping("/Login")
public String Login(){
return "Login";
}
}
在页面使用模板内容
自定义模板
th:include
第一种方式~{temPlateName::selector}
我是div,include模板Fragment
第二种方式temPlateName::selector
我是div,include模板Fragment
th:insert
第一种方式~{temPlateName::selector}
我是div,insert模板Fragment
第二种方式temPlateName::selector
我是div,insert模板Fragment
查看结果
这几种不同方式的区别:在于使用模板后,页面的源代码不同
insert会将模板打包到一个div里再拼接到页面代码上
第一种方式
第二种方式
路径是指模板页面和展示页面的相对路径