感谢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
,但是,我尽量避免这种情况,因为参数值是敏感的,不应该在浏览器上向用户公开。那该怎么办?
答案 0 :(得分:4)
正如spring documentation chapter 17.6
所述Flash属性在重定向之前暂时保存(通常是 在会话中)在重定向后可用于请求 并立即删除。
如果您希望结果持续多次请求,您可以将它们存储在具有某些标识符的会话中,并将标识符作为请求参数传递给结果页面
我通常做的其他方法是检查结果页面上是否存在结果模型,如果不是仅仅重定向到错误页面(即:用户不想直接按刷新/访问结果页面,如果它们只是出现错误)。然后使用javascript
进行客户端刷新防护