【Spring boot学习第十天】集成thymeleaf

1.新建springboot项目

2.勾选thymeleaf依赖

3.我们来编写配置文件,这里可以是yaml、yml或properties配置文件,我们以yml文件为例。

4.我们在classpath目录下新建一个web目录,然后再web目录下建立student.html文件

5.新建controller,我们进行测试

StudentController.java

package com.wangs.controller;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import com.wangs.bean.Student;

@Controller
@RequestMapping("/student/")
public class StudentController {

	@RequestMapping("show")
	public String show(Model model) {
		//添加字符串
		model.addAttribute("hello", "hello spring boot thymeleaf!");
		model.addAttribute("img", "http://img.xiuren.com/upload/image/201904/02/17/1554197531769682.jpg");
		
		//添加实体类
		Student stu=new Student();
		stu.setAge(18);
		stu.setGender("女");
		stu.setName("杨秀芹");
		model.addAttribute("stu",stu);
		
		//添加list或map
		List<Map<String,String>>list=new ArrayList<Map<String,String>>();
		for(int i=0;i<10;i++) {
			Map<String,String>map =new HashMap<String,String>();
			map.put("name", "杨秀芹"+i);
			if(i==9) {
				map.put("name", "杨秀芹");
			}
			list.add(map);
		}
		model.addAttribute("list", list);
		
		//return的字符串与模板的html名字一致,此处对应“student.html”
		return "student";
	}
}

Student.java

package com.wangs.bean;

public class Student {

	String name;
	int age;
	String gender;
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getGender() {
		return gender;
	}
	public void setGender(String gender) {
		this.gender = gender;
	}
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + age;
		result = prime * result + ((gender == null) ? 0 : gender.hashCode());
		result = prime * result + ((name == null) ? 0 : name.hashCode());
		return result;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Student other = (Student) obj;
		if (age != other.age)
			return false;
		if (gender == null) {
			if (other.gender != null)
				return false;
		} else if (!gender.equals(other.gender))
			return false;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		return true;
	}
	
}

6.这时候我们打开浏览器输入“http://localhost:8081/student/show”,看到如下页面,说明thymeleaf配置成功

7.我们来获取model中的数据

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>student</title>
	</head>
	<body>
		<h3>thymeleaf</h3>
		<!-- span标签中的“th:text”元素中的th是thymeleaf的简写,text表示span的text属性,此行代码表示使用thymeleaf的hello变量的值来替换span标签中的text值 -->
		<span th:text="${hello}">span</span><br>
		<h2>学生信息</h2>
		name:<input th:text="${stu.name}" /><br>
		age:<input th:text="${stu.age}"/><br><br>
		
		<h3>input框</h3>
		<!-- 使用input的value属性对input框的value进行赋值 -->
		name:<input th:value="${stu.name}" /><br>
		age:<input th:value="${stu.age}"/>
		
		<h3>超链接</h3>
		<!-- 超链接的写法比较奇怪,记住就可以了,不会了,再来查 -->
		<a href="http://www.baidu.com" th:href="@{http://www.souhu.com(id=${stu.name})}">超链接</a>
		
		<h3>循环</h3>
		<h3>UL列表</h3>
		<ul>
			<li th:each="s:${list}" th:text="${s.name}"></li>
		</ul>
		
		<h3>table</h3>
		<table>
			<tr th:each="l:${list}">
				<td th:text="${l.name}"></td>
				<td>女</td>
			</tr>
		</table>
		
		<h3>select框</h3>
		<!-- th:selected="${l.name==stu.name}表示如果l.name和stu.name相等的话,就会返回true,name这条option就会被选中 -->
		<select>
			<option th:each="l:${list}" th:text="${l.name}" th:value="${l.name}" th:selected="${l.name==stu.name}"></option>
		</select>
		<h3>图片</h3>
		<img th:src="${img}"/>
	</body>
</html>

显示结果如下:

附目录结构

【总结】

thymeleaf虽然用上去看着比freemarker复杂,但这个模板可以是前后端完全分离开,同样的html,前端工程师看到的是前端的原型,后端工程师看到的是渲染了页面的数据之后的动态页面。这就是thymeleaf的优势。

注意:

Controller中一定要使用@Controller注解,不要使用@RestController注解,否则会直接返回json数据,不会跳转页面

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值