我创建了一个控制器来完成一些业务逻辑并创建一个模型。如果我通过返回具有视图名称和模型的ModelAndView直接传递此模型来查看 - 一切正常。但是现在我想在另一个页面上显示结果。所以我使用“重定向:”前缀重定向到另一个控制器,但模型丢失。Spring MVC - 控制器之间的通过模型
我缺少什么?
问候, 阿列克
我创建了一个控制器来完成一些业务逻辑并创建一个模型。如果我通过返回具有视图名称和模型的ModelAndView直接传递此模型来查看 - 一切正常。但是现在我想在另一个页面上显示结果。所以我使用“重定向:”前缀重定向到另一个控制器,但模型丢失。Spring MVC - 控制器之间的通过模型
我缺少什么?
问候, 阿列克
由于redirect:
前缀运行另一个控制器,你将失去任何你在ModelAndView中曾在以前的控制器。也许业务逻辑控制器根本不应该是一个控制器 - 也许你应该把它变成一个普通的类,并让结果控制器调用它。然后结果控制器可以将数据保存到模型中。
选项1: 您可以将模型放入会话中并将其取回到控制器中并在会话中使其无效。
选项2: 你说,你有两个控制器,第一个将检索用户的输入,并做一些业务逻辑和重定向到另一个。我的建议是将放置在两个控制器中的业务逻辑移到一个类中,并且只有一个控制器会将模型和视图返回给用户。
但是我如何使用Spring-MVC在注释中保存模型。你可以给我一个例子吗? – Oleksandr 2010-01-02 13:40:24
ModelAndView mv = new ModelAndView(); mv.addObject(“key1”,“value1”); mv.addObject(“key2”,“value2”); mv.addObject(“key3”,“value3”); request.getSession()。setAttribute(“model”,mv.getModelMap()); – novice 2010-01-02 13:58:35
非常感谢您的回答!我们就快到了。我唯一不明白的是如何在HttpSession中使用注释存储参数。 例如@SessionAttributes在控制器内的请求之间存储数据。有没有任何注释可以永久存储数据。或者我们如何使用@RequestParam访问HttpSession?矿石还有其他的方法吗? – Oleksandr 2010-01-02 15:10:55
我不会使用@SessionAttributes,因为它在未来的Spring版本中可能会发生变化。我会用老式的方式,阿列克表明您上面
莫名其妙旧的文章,但也许别人会发现它有用
可以使用正向坚持:前缀,这最终会调用RequestDispatcher.forward() insted的重定向:前缀。
此解决方案适用于我。谢谢@Niraj – will824 2013-02-28 20:36:20
在重定向期间:使用GET方法发送请求并将参数附加到url。您可以在控制器中使用新的方法来使用@RequestParameter注释接收请求参数。 虽然重定向请求简单添加的所有参数字符串
e.g ModelAndView mv = new ModelAndView();
mv.setViewName(redirect:/your/url);
mv.addObject("param1", string_param);
.
.
.
这样你就可以成功地重定向。
是的,我可以分开我的业务逻辑在另一个类。但为了使这个逻辑发生,我需要输入参数。我从我的第一个控制器中的用户获取它们,我需要一种方法将它们传递给另一个(结果)控制器,随后将调用业务逻辑类。 你看,我的难处是在控制器(输入数据控制器和结果控制器)之间传递一些数据(在这种情况下为输入参数)。 – Oleksandr 2010-01-01 16:26:30