You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

Spring Boot MVC(Java)向Thymeleaf(HTML)传递数据但无法显示

Spring Boot MVC(Java)向Thymeleaf(HTML)传递数据但无法显示

看起来你正在给Java后端搭建Spring MVC前端,用了Spring Controller但数据传到Thymeleaf页面后无法显示对吧?先把你提到的核心代码整理好,咱们一步步排查问题:


你的Controller核心代码(格式化后)

package money.pension1;

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

//import java.util.List;

@Controller
public class StackController {

    // 你提到的核心方法:viewHomePage
    @GetMapping("/")
    public String viewHomePage(Model model) {
        // 你注释的预期逻辑:传递Employee列表到页面
        // List<Employee> allemplist = ...; // 这里是获取员工数据的逻辑
        // model.addAttribute("employees", allemplist);
        
        return "home"; // 假设返回的是home.html页面
    }
}

一步步排查解决数据不显示的问题

  • 第一步:确保Thymeleaf依赖已正确引入
    这是基础前提,没引入依赖的话页面根本无法识别Thymeleaf语法。检查你的构建文件:
    Maven(pom.xml)示例:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
    

    Gradle(build.gradle)示例:

    implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
    
  • 第二步:确认Model与页面的key完全匹配
    你打算把员工列表以employees为key存入Model,那Thymeleaf页面必须用完全一致的key取值,不能有拼写错误。同时页面必须声明Thymeleaf命名空间,否则语法会被当成普通HTML忽略:

    <!DOCTYPE html>
    <html xmlns:th="http://www.thymeleaf.org">
    <head>
        <title>首页</title>
    </head>
    <body>
        <table>
            <thead>
                <tr>
                    <th>ID</th>
                    <th>姓名</th>
                </tr>
            </thead>
            <tbody>
                <!-- 这里的${employees}必须和Controller里model.addAttribute的key完全一致 -->
                <tr th:each="emp : ${employees}">
                    <td th:text="${emp.id}"></td>
                    <td th:text="${emp.name}"></td>
                </tr>
            </tbody>
        </table>
    </body>
    </html>
    
  • 第三步:检查页面位置与Controller映射的一致性

    • Thymeleaf页面必须放在Spring Boot默认的目录:src/main/resources/templates/,文件名要和Controller返回的视图名完全匹配(比如你返回"home",页面就得是home.html
    • Controller的@GetMapping路径要和你访问的URL一致,比如@GetMapping("/")对应访问http://localhost:8080/
  • 第四步:确保Employee类有公开的getter方法
    Thymeleaf取值依赖JavaBean规范的getter方法,没有的话页面无法获取属性值。比如你的Employee类要这么写:

    public class Employee {
        private Integer id;
        private String name;
    
        // 无参构造方法(Spring实例化需要)
        public Employee() {}
    
        // 带参构造方法(可选,用于初始化数据)
        public Employee(Integer id, String name) {
            this.id = id;
            this.name = name;
        }
    
        // 必须的getter方法
        public Integer getId() {
            return id;
        }
    
        public String getName() {
            return name;
        }
    }
    
  • 第五步:验证数据是否真的被传入Model
    可以在Controller里加打印语句,确认数据不为空且已存入Model:

    @GetMapping("/")
    public String viewHomePage(Model model) {
        // 先模拟一组测试数据,排除数据为空的问题
        List<Employee> allemplist = Arrays.asList(
            new Employee(1, "张三"),
            new Employee(2, "李四")
        );
        model.addAttribute("employees", allemplist);
        // 控制台打印确认数据
        System.out.println("传递到页面的员工列表:" + allemplist);
        return "home";
    }
    

    启动项目后看控制台输出,如果数据存在,问题大概率在页面端;如果数据为空,先解决后端数据获取的问题


按照这个顺序一步步排查,基本就能解决数据不显示的问题啦~

火山引擎 最新活动