如何通过Java Bean结合Spring、Thymeleaf在HTML中展示数据
解决Spring + Thymeleaf展示Bean数据的问题
你的代码目前缺少几个关键环节,导致无法在HTML中展示Book的数据,以下是修正方案:
问题分析
- 没有Controller层:Spring MVC需要通过Controller处理请求,并将Bean数据传递给Thymeleaf视图
- Thymeleaf变量名错误:你用了类名
Book作为变量名,应该使用Controller传递到模型中的变量名(通常是小写的book) - Book实例未初始化:当前Bean的author和title都是空值,需要先赋值
修正后的完整代码
1. 添加BookController类
package com.example.platformylab03; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; @Controller public class BookController { // 注入Spring管理的Book Bean private final Book book; // 构造方法注入 public BookController(Book book) { this.book = book; // 初始化书籍数据 book.setAuthor("乔治·奥威尔"); book.setTitle("1984"); } // 处理根路径请求,返回视图并传递数据 @GetMapping("/") public String showBookInfo(Model model) { // 将Book实例添加到模型,键名"book"对应Thymeleaf中的变量名 model.addAttribute("book", book); return "index"; // 对应templates目录下的index.html文件 } }
2. 保持Book Bean不变(或可选初始化)
如果想给Book设置默认值,可以修改无参构造方法,否则原代码无需改动:
package com.example.platformylab03; import org.springframework.stereotype.Component; @Component public class Book { private String author; private String title; public Book() { // 可选:设置默认数据 // this.author = "默认作者"; // this.title = "默认书名"; } // getter和setter方法不变 public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } }
3. 修改HTML视图
注意要引入Thymeleaf命名空间,修正变量名:
<!DOCTYPE html> <html lang="zh-CN" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>书籍信息</title> </head> <body> <h1>书籍详情</h1> <p>作者:<span th:text="${book.author}"></span></p> <p>书名:<span th:text="${book.title}"></span></p> </body> </html>
核心知识点说明
- @Controller:标记类为Spring MVC控制器,负责接收HTTP请求并返回视图
- Model:作为数据载体,将后端Bean传递到前端视图,
model.addAttribute()方法的第一个参数是前端可访问的变量名 - Thymeleaf表达式:
${book.author}会调用Book实例的getAuthor()方法获取值,遵循JavaBean规范 - 组件注入:由于Book类添加了
@Component注解,Spring会自动创建其实例,可通过构造方法注入到Controller中使用
内容的提问来源于stack exchange,提问作者LLager
相关产品推荐
相关产品推荐

