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
相关产品推荐
相关产品推荐

