《Spring Boot从入门到实战》第五章习题答案

devtools/2024/11/7 20:35:23/

5.7 本章练习

1)创建Spring Boot Web项目,使用Thymeleaf页面模板引擎实现人员管理模块的功能。

答案:

1. 创建人员实体类 创建一个 Person 实体类,用于定义人员属性

package com.example.demo.bean;import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;@Entity
public class Person {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private String name;private Integer age;private String email;public Person() {}public Person(Long id, String name, Integer age, String email) {this.id = id;this.name = name;this.age = age;this.email = email;}public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}
}

2. 创建控制器 创建 PersonController,用于处理请求:

package com.example.demo.controller;import com.example.demo.bean.Person;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;import java.util.ArrayList;
import java.util.List;@Controller
@RequestMapping("/persons")
public class PersonController {List<Person> personList = new ArrayList<>();public PersonController() {personList.add(new Person(1L, "Alice", 12, "123@163.com"));personList.add(new Person(2L, "Bob", 12, "123@163.com"));}@GetMappingpublic String listPersons(Model model) {model.addAttribute("persons", personList);return "person/list";}@GetMapping("/add")public String addPersonForm(Model model) {model.addAttribute("person", new Person());return "person/add";}@PostMapping("/add")public String savePerson(@ModelAttribute Person person) {person.setId(Long.valueOf(personList.size()) + 1);personList.add(person);return "redirect:/persons";}@GetMapping("/edit/{id}")public String editPersonForm(@PathVariable Long id, Model model) {int personIndex = getPersonIndexUsingPersonId(id);Person person = personList.get(personIndex);model.addAttribute("person", person);return "person/edit";}private Integer getPersonIndexUsingPersonId(Long personId){int personIndex = 0;for (Person personObj : personList) {if (personObj.getId() == personId) {personIndex = personList.indexOf(personObj);}}return personIndex;}@PostMapping("/edit/{id}")public String updatePerson(@PathVariable Long id, @ModelAttribute Person person) {int personIndex = getPersonIndexUsingPersonId(id);personList.set(personIndex, person);return "redirect:/persons";}@GetMapping("/delete/{id}")public String deletePerson(@PathVariable Long id) {int personIndex = getPersonIndexUsingPersonId(id);personList.remove(personIndex);return "redirect:/persons";}}

3. 创建 Thymeleaf 页面模板

在 src/main/resources/templates/person 下创建以下 HTML 文件:

(1) list.html:显示人员列表

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head><title>Person List</title>
</head>
<body>
<h2>Person List</h2>
<a href="/persons/add">Add Person</a>
<table border="1"><tr><th>ID</th><th>Name</th><th>Age</th><th>Email</th><th>Actions</th></tr><tr th:each="person : ${persons}"><td th:text="${person.id}"></td><td th:text="${person.name}"></td><td th:text="${person.age}"></td><td th:text="${person.email}"></td><td><a th:href="@{/persons/edit/{id}(id=${person.id})}">Edit</a> |<a th:href="@{/persons/delete/{id}(id=${person.id})}">Delete</a></td></tr>
</table>
</body>
</html>

(2) add.html:添加人员表单

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head><title>Add Person</title>
</head>
<body>
<h2>Add New Person</h2>
<form action="#" th:action="@{/persons/add}" th:object="${person}" method="post">Name: <input type="text" th:field="*{name}"/><br/>Age: <input type="number" th:field="*{age}"/><br/>Email: <input type="email" th:field="*{email}"/><br/><button type="submit">Save</button>
</form>
</body>
</html>

(3) edit.html:编辑人员表单

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head><title>Edit Person</title>
</head>
<body>
<h2>Edit Person</h2>
<form action="#" th:action="@{/persons/edit/{id}(id=${person.id})}" th:object="${person}" method="post">Name: <input type="text" th:field="*{name}"/><br/>Age: <input type="number" th:field="*{age}"/><br/>Email: <input type="email" th:field="*{email}"/><br/><button type="submit">Update</button>
</form>
</body>
</html>

4. 运行项目
启动 Spring Boot 应用程序,访问 http://localhost:8080/persons 即可查看人员管理模块的功能。

2)使用Thymeleaf实现系统的整体布局,包括顶部、底部、左侧菜单栏和右部主区域。

答案:

在templates/layout目录下新建footer.html、header.html、left.html等各区域模板页面。

footer.html的内容如下:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>footer</title>
</head>
<body><footer th:fragment="footer"><div style="position: fixed;bottom: 0px;background-color: green;width: 100%"><h1 style="text-align: center">我是底部</h1></div></footer>
</body>
</html>

left.html的内容如下:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>left</title>
</head>
<body><left th:fragment="left"><div style="background-color: red;width: 200px;height: 80vh;"><h1 style="margin: 0px;">我是左侧</h1></div></left>
</body>
</html>

header.html的内容如下:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>header</title>
</head>
<body><header th:fragment="header"><div style="background-color: blue;height: 100px;"><h1 style="text-align: center;margin: 0;">我是头部</h1></div></header>
</body>
</html>

在templates/layout目录下新建index.html页面,内容如下:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Layout</title>
</head>
<body style="margin: 0px;"><div><div th:replace="layout/header :: header"></div><div th:replace="layout/left :: left"></div><div th:replace="layout/footer :: footer"></div></div>
</body>
</html>

在后端添加访问入口:

@RequestMapping("/layout/index")public String index() {return "layout/index";}

运行验证,效果图如下:


http://www.ppmy.cn/devtools/132116.html

相关文章

HTML第一次作业

制作带有下拉悬停菜单的导航栏 <!DOCTYPE html> <html> <head><meta charset"utf-8"><title>带有下拉悬停菜单的导航栏</title><style>* {margin: 0;padding: 0;}#menu {background-color: blue;width: 100%;height: 50p…

一个国产 API 开源项目,在 ProductHunt 杀疯了...

随着AI 大模型技术的兴起&#xff0c;全球产品更新和面市进程速度肉眼可见的加快&#xff0c;Product Hunt 作为全球知名的产品发现平台&#xff0c;每日都会精选出一系列产品能力强劲的新产品&#xff0c;这些产品不仅代表了技术前沿&#xff0c;还反映了市场的发展趋势。 上…

ubuntu 22.04 server 安装 和 初始化 LTS

ubuntu 22.04 server 安装 和 初始化 下载地址 https://releases.ubuntu.com/jammy/ 使用的镜像是 ubuntu-22.04.5-live-server-amd64.iso usb 启动盘制作工具 https://rufus.ie/zh/ rufus-4.6p.exe 需要主板 支持 UEFI 启动 Ubuntu22.04.4-server安装 流程 https://b…

解决 Fail to pip install mlc-llm

[Question] Fail to pip install mlc-llm Issue #2974 mlc-ai/mlc-llm GitHub❓ General Questions Hi, I’m trying to install mlc-llm on my Jetson agx orin. Environment: Jetson agx orin、Ubuntu 20.04、CUDA 12.2 I ran the following commands:conda create -n ml…

解密.Lockbit3.0勒索病毒:恢复加密数据与预防策略

引言 随着信息技术的飞速发展&#xff0c;勒索病毒作为一种新型的网络攻击手段&#xff0c;正对全球范围内的计算机系统构成严重威胁。其中&#xff0c;.Lockbit3.0勒索病毒以其高度的隐蔽性、传播性和危害性&#xff0c;成为了众多企业和个人用户的心头之患。本文将详细介绍.…

苍穹外卖Day3test报错javax.websocket.server.ServerContainer not available

苍穹外卖Day3test报错javax.websocket.server.ServerContainer not available springboot 中集成websocket出的问题 测试会报错&#xff0c;启动程序不会报错 除了test的时候运行会报错&#xff0c;正常时候编写不会出错&#xff0c;不用管这个问题&#xff0c;继续往下进行…

企业CRM管理系统PHP源码/PHP客户关系CRM客户管理系统源码

系统功能实现 1、 公海管理:公海类型、客户公海。 2、 线索管理:我的线索、线索列表、线索状态、线索来源。 3、 客户管理:我的客户、客户列表、成交客户、行业类别、预查、地区列表、客户状态、客户级别。 4、 业绩订单:订单列表、我的订单。 5、 系统设置:系统设置…

单位存款证明管理

单位存款证明管理 在现代金融业务中&#xff0c;单位存款证明是企业与银行之间重要的金融凭证之一。随着银行业务流程的不断优化和升级&#xff0c;集中处理模式成为了提高效率和安全性的新趋势。本文将为您详细介绍单位存款证明管理的集中处理模式&#xff0c;以及它如何为银…