我创建了一个控制器来执行一些业务逻辑并创建一个模型。如果我通过返回带有视图名称和模型的ModelAndView直接将此模型传递给视图 - 一切都运行良好。但现在我想在另一页显示结果。所以我使用“redirect:”前缀重定向到另一个控制器,但模型丢失了。
我错过了什么?
此致 奥列克
答案 0 :(得分:11)
你可以使用forward:前缀最终执行RequestDispatcher.forward() 而不是重定向:前缀。
答案 1 :(得分:4)
选项1: 您可以将模型放入会话中并将其返回到控制器中并在会话中使其无效。
选项2: 你说,你有两个控制器,第一个将检索用户输入并执行一些业务逻辑并重定向到另一个。我的建议是将放置在两个控制器中的业务逻辑移动到一个类中,并且只有一个控制器可以将模型和视图返回给用户。
答案 2 :(得分:2)
在重定向期间:使用GET方法发送请求,并将参数附加到网址。您可以在控制器中使用@RequestParameter注释接收请求参数。 重定向请求时,将所有参数添加为字符串
e.g ModelAndView mv = new ModelAndView();
mv.setViewName(redirect:/your/url);
mv.addObject("param1", string_param);
.
.
.
这样您就可以成功重定向。
答案 3 :(得分:0)
由于redirect:
前缀运行另一个控制器,您将丢失前一个控制器中ModelAndView中的所有内容。也许业务逻辑控制器根本不应该是一个控制器 - 也许你应该把它变成一个普通的类,并让结果控制器调用它。然后结果控制器可以将数据保存到模型中。
答案 4 :(得分:0)
我不会使用@SessionAttributes,因为它可能会在将来的spring版本中发生变化。我会坚持Oleksandr向你展示的老式方式
某种旧帖子,但也许其他人会发现它很有用