在请求之间保持弹簧状态

如果这是一个初学者的问题,我是新手,很抱歉,但手册不清楚(至少不适合我)

我的问题是:如何在spring的请求之间共享状态? 我可以使用ModelMap将数据从控制器发送到视图,但是ModelMap中的数据不会被视图发送回下一个控制器。 我怎么能用弹簧做到这一点?

以下是我的源代码的一部分。 在第二个控制器中,modelMap不包含我在第一个控制器中存储在modelMap中的数据。 我怎么能在spring保持控制器之间的状态?

非常感谢你的帮助。

@RequestMapping(value = "find/something", method = RequestMethod.GET) public String foo(@RequestParam("parent") Parent parent, ModelMap modelMap) { ... modelMap.addAttribute("question_index", 42); modelMap.addAttribute("something", new Something()); modelMap.addAttribute("data", new Data()); return "some/view"; } 
...// using Something() and 42
@RequestMapping(value = "bla", method = RequestMethod.POST) public String bla(@ModelAttribute("data") Data data, BindingResult result, ModelMap modelMap) { System.out.println(modelMap); // doesn't contain question_index, or something }

您可以将modelMap放在HttpSession ,或者(对于大型应用程序更好),使用Spring Web流程 ,您可以在其中进行所谓的对话。

在Spring中最简单的方法是使用会话范围的spring bean。 bean的实例将是会话专用的,并且在每个会话开始时由Spring实例化和管理。 这个bean可以保持你的对话状态。

在幕后,这个机制使用标准的HttpSession属性,但这意味着你的代码不必直接处理HttpSession ,所以整体来说它更清晰。

有关如何配置和使用它的信息,请参阅Spring文档的相关部分 (以及此处 )。

非常感谢您的建议,我通过将ModelMap的键标记为session-attibutes来解决它:

 @SessionAttributes( { "question_index", "something" }) @Controller public class MyController{ ... } 

通常(并且没有Spring),此类数据将进入servlet会话。

自己做。