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

Spring中如何在Thymeleaf视图中展示新增记录的ID?

实现记录插入后在Thymeleaf展示新生成ID的方法

问题分析

你当前的代码里,Service层的registerUser方法没有返回保存后的实体,Controller也未将生成的ID传递给Thymeleaf视图;且因为使用了redirect,普通Model参数无法跨请求保留,所以需要调整代码来实现需求。

具体实现步骤

1. 修改Service层,返回保存后的User实体

JpaRepository的save()方法会自动返回包含生成ID的实体对象,修改Service方法来返回该对象:

public User registerUser(User user) {
    return userRepository.save(user);
}

2. 在Controller中传递生成的ID到视图

使用RedirectAttributes的addFlashAttribute方法传递跨请求参数(这种方式不会把ID暴露在URL中,符合Post/Redirect/Get规范):

import org.springframework.web.servlet.mvc.support.RedirectAttributes;

// 注入RedirectAttributes参数
public String userRegister(User user, RedirectAttributes redirectAttributes) {
    // 获取保存后的用户实体,已包含生成的idUser
    User savedUser = userService.registerUser(user);
    // 将ID存入flash属性,供跳转后的视图获取
    redirectAttributes.addFlashAttribute("idUser", savedUser.getIdUser());
    // 存入成功标识,控制视图中成功信息的显示
    redirectAttributes.addFlashAttribute("registerSuccess", true);
    return "redirect:/home";
}

3. 在Thymeleaf视图中展示ID

通过Thymeleaf表达式获取flash属性,结合成功标识展示内容:

<!-- 仅注册成功时显示ID -->
<div th:if="${registerSuccess}">
    注册成功!您的用户ID:<span th:text="${idUser}"></span>
</div>

备选方案(URL传参)

如果不介意ID出现在URL中,也可以直接将ID作为请求参数传递:

public String userRegister(User user) {
    User savedUser = userService.registerUser(user);
    return "redirect:/home?success&idUser=" + savedUser.getIdUser();
}

对应的Thymeleaf视图获取方式:

<div th:if="${param.success}">
    注册成功!您的用户ID:<span th:text="${param.idUser}"></span>
</div>

内容的提问来源于stack exchange,提问作者Djorkaeff

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 18:52:48