我有以下顺序 .
View1 (POST form) -> PostController (create model and redirect) -> GetController -> View2
我正在使用RedirectAttributes在PostController和GetController之间传递模型
class PostController {
public String mypost(..., final RedirectAttributes redirectAttrs){
//create model
redirectAttrs.addFlashAttribute("model", model);
return "redirect:myget";
}
}
和
@SessionAttributes("model")
class GetController {
public ModelAndView myget(@ModelAttribute("model") final Model model){
ModelAndView mav = new ModelAndView("view2");
mav.addObject("model", model);
return mav;
}
}
当用户在浏览器上打开多个选项卡,然后刷新前一个选项卡时,后一个打开的选项卡将覆盖它 .
我希望每个标签都是独立的,希望有人指出我正确的方向 .
谢谢 .
Edit
问题出在@SessionAttributes("model") . 我之所以使用它,是因为“重定向之后(通常在会话中)临时保存Flash属性,以便在重定向和 removed immediately 之后对请求可用 . ”因此,选项卡会相互覆盖,因为会话中的模型已更新 .
1 回答
通常当我使用PRG时,我尝试将所有相关属性放在重定向URL中 . 这样的东西......
这样,当您截取重定向的get请求时,您不必依赖任何以前存储的会话数据 .
将模型保存为会话属性有点像将页面存储在全局变量中 . 这不是一个好主意 . 当你在页面上点击刷新时,get请求只会发送url中的内容(如果你正在使用它,可能会发送一些cookie数据) .