如何在Spring中将对象从一个控制器传递到另一个控制器而不使用Session

时间:2013-10-25 09:35:18

标签: java spring session spring-mvc

我要求用户从表单中选择一些数据,我们需要在下一页显示所选数据。

目前我们使用会话属性执行此操作,但问题是,如果第一页在另一个浏览器选项卡中打开,则会覆盖数据,再次选择并提交数据。所以我只想在将数据从一个控制器传输到另一个控制器时摆脱这个会话属性。

注意:我使用的是基于XML的Spring配置,因此请使用XML而不是注释来显示解决方案。

3 个答案:

答案 0 :(得分:3)

在第一页处理RedirectAttributes的{​​{1}}方法中定义handler方法参数:

form submission

Flash属性在重定向之前暂时保存(通常在会话中),并且在重定向后可用于请求并立即删除。

上述重定向将导致客户端(浏览器)向@RequestMapping("/sendDataToNextPage", method = RequestMethod.POST) public String submitForm( @ModelAttribute("formBackingObj") @Valid FormBackingObj formBackingObj, BindingResult result, RedirectAttributes redirectAttributes) { ... DataObject data = new DataObject(); redirectAttributes.addFlashAttribute("dataForNextPage", data); ... return "redirect:/secondPageURL"; } 发送请求。所以你需要一个处理程序方法来处理这个请求,你可以在那里访问/secondPageURL处理程序方法中的DataObject data集:

submitForm

此处@RequestMapping(value = "/secondPageURL", method = RequestMethod.GET) public String gotoCountrySavePage( @ModelAttribute("dataForNextPage") DataObject data, ModelMap model) { ... //data is the DataObject that was set to redirectAttributes in submitForm method return "pageToBeShown"; } 是包含DataObject data方法数据的对象。

答案 1 :(得分:2)

我使用了此要求并使用了RedirectAttributes,然后您可以将此重定向属性添加到模型中。这是一个例子:

@RequestMapping(value = "/mypath/{myProperty}", method = RequestMethod.POST)
public String submitMyForm(@PathVariable Long myProperty, RedirectAttributes redirectAttributes) {
    redirectAttributes.addFlashAttribute("message", "My property is: " + myProperty);
    return "redirect:/anotherPage";
}
@RequestMapping(method = RequestMethod.GET)
public String defaultPage(Model model, @RequestParam(required = false) String message) {
    if(StringUtils.isNotBlank(message)) {
        model.addAttribute("message", message);
    }
    return "myPage";
}

希望它有所帮助。

答案 2 :(得分:0)

您可以使用RedirectAttributes;控制器可用于为重定向方案选择属性的Model接口的特化。

@RequestMapping(value = "/accounts", method = RequestMethod.POST)
public String handle(RedirectAttributes redirectAttrs) {
 // Save account ...
 redirectAttrs.addFlashAttribute("message", "Hello World");
 return "redirect:/testUrl/{id}";
 }

此外,此界面还提供了一种存储" Flash属性" 。 Flash属性位于FlashMap中。

FlashMap :FlashMap为一个请求提供了一种存储打算在另一个请求中使用的属性的方法。从一个URL重定向到另一个URL时,最常需要这样做。 快速示例

Left Outer Join

Reference and detail information are here