Spring MVC重定向后传数据至视图:RedirectAttribute无法生效求助
解决RedirectAttributes传递数据失效的问题
咱们先揪出核心问题:你用RedirectAttributes没生效,大概率是用法不对或者配置没到位,下面一步步来修正:
1. 正确使用addFlashAttribute传递跨请求数据
重定向是两次完全独立的请求,普通Model数据没法跨请求传递,必须用addFlashAttribute把数据存入临时session,Spring会自动在重定向完成后清理这个session数据,避免内存占用。
修正你的控制器代码:
@RequestMapping(value = "/user.htm") public ModelAndView addUser(RedirectAttributes redirAtt) { ModelAndView mv = new ModelAndView("redirect:user"); String out = "All Users List"; // 用addFlashAttribute存储跨请求需要传递的数据 redirAtt.addFlashAttribute("userMessage", out); // 如果要传递对象/集合也可以,比如:redirAtt.addFlashAttribute("userList", userService.getAllUsers()); return mv; }
2. 在目标视图/控制器中获取数据
如果redirect:user是直接跳转到视图(比如user.jsp),直接在视图里用EL表达式访问即可:
<!-- user.jsp 示例 --> <h3>${userMessage}</h3> <!-- 如果传递了用户列表,遍历展示 --> <c:forEach items="${userList}" var="user"> <p>用户名:${user.username} | 邮箱:${user.email}</p> </c:forEach>
如果redirect:user对应另一个控制器方法,你可以用@ModelAttribute接收flash属性:
@RequestMapping("/user") public String showUsers(@ModelAttribute("userMessage") String message, Model model) { // 可以把数据再放到Model里供视图使用,或者直接在方法内逻辑处理 model.addAttribute("pageMessage", message); return "user"; }
3. 确保Spring MVC配置支持Flash属性
如果以上操作还是没效果,检查你的Spring配置:
- 若用XML配置,确保添加了
<mvc:annotation-driven />,它会自动注册FlashMapManager组件来处理flash属性。 - 若用Java配置,确保配置类上标注了
@EnableWebMvc,同样会自动配置相关支持组件。
常见误区提醒
- 别用
addAttribute代替addFlashAttribute:addAttribute会把数据拼到重定向的URL上,仅适合简单字符串参数,敏感数据或复杂对象不适用,还可能出现编码问题。 - 重定向路径要准确:
redirect:user是相对路径,要和你的控制器映射路径匹配;如果是项目根路径下的映射,建议写redirect:/user(带斜杠的绝对路径)。
内容的提问来源于stack exchange,提问作者B K
相关产品推荐
相关产品推荐

