2

感谢 Spring 3.1,我可以使用 RedirectAttributes.addFlashAttribute 进行 Post/Redirect/Get,但似乎有小问题

这是持久化表单对象的方法,然后重定向到视图以显示该表单对象:

@RequestMapping(value = "/{formType}/onTheEarch", method = RequestMethod.POST)
public String submitAndRedirect(SomeWebForm someWebForm,
        @PathVariable("formType") String formType,
        final RedirectAttributes redirectAttributes) {

            // do something according to formType
            // .......

            redirectAttributes.addFlashAttribute("webObject", webObject);
            String view = "redirect:/formType/toTheMoon";
    }

这是将用户引导到显示表单对象的视图的方法

@RequestMapping(value = "/{formType}/toTheMoon", method = RequestMethod.GET)
public String submitAndRedirect(@PathVariable("formType") String formType) {
            // do something according to formType
            // .......
            String view = "toTheMoon";
    }

到目前为止一切顺利,但有一个不足之处。当我刷新视图toTheMoon时,一切都消失了。所以这里的问题是

(1)How does `RedirectAttributes.addFlashAttribute` works? 
(2)How can I keep the object from "FlashAttribute" even after refreshing the page?

我知道对于第二个问题,我们可以避免RedirectAttributes.addFlashAttribute并且只传递 URL 中的任何参数来实现RGP pattern. 那么该怎么办?

4

1 回答 1

4

弹簧文档第 17.6 章所述

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

如果您希望结果持续几个请求,您可以将它们存储在带有某个标识符的会话中,并仅将标识符作为请求参数传递给结果页面

我通常做的其他方法是检查结果页面上是否存在结果模型,如果不只是重定向到错误页面(即:用户不打算直接按刷新/访问结果页面,如果他们确实出现错误)。然后使用 javascript 进行客户端刷新预防

于 2013-04-23T22:37:08.233 回答