You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Java Bean结合Spring、Thymeleaf在HTML中展示数据

解决Spring + Thymeleaf展示Bean数据的问题

你的代码目前缺少几个关键环节,导致无法在HTML中展示Book的数据,以下是修正方案:

问题分析

  1. 没有Controller层:Spring MVC需要通过Controller处理请求,并将Bean数据传递给Thymeleaf视图
  2. Thymeleaf变量名错误:你用了类名Book作为变量名,应该使用Controller传递到模型中的变量名(通常是小写的book)
  3. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 07:55:26