具有多个选项卡会话解决方案的Spring MVC PRG模式
我有以下顺序。
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; } }
当用户在浏览器上打开多个选项卡时,刷新较早的选项卡,它将被后面打开的选项卡覆盖。
我希望每个标签都是独立的,希望有人指向正确的方向。
谢谢。
编辑
问题出在@SessionAttributes(“模型”)。 我使用它,因为“在重定向之前临时保存Flash属性(通常在会话中),以便在重定向后立即将其删除。” 因此,选项卡会相互覆盖,因为会话中的模型已更新。
通常,当我使用PRG时,我尝试将所有相关属性都放入重定向url中。 像这样的东西...
public String myPost(ThingBean thingBean){
Thing t = myService.updateThing(thingBean);
return "redirect:thingView?id="+t.getId();
}
这样,当你拦截重定向的get请求时,你不必依赖任何先前存储的会话数据。
@RequestMapping(value="thingView",method=RequestMethod.Get)
public String thingView(Map<String,Object> model, @RequestParam(value="id") Integer id){
model.put("thing",myService.getThing(id));
return "thing/viewTemplate";
}
将模型保持为会话属性就像将页面存储在全局变量中一样。 这不是一个好主意。 当你点击页面上的刷新时,获取请求只会发送网址中的内容(如果你使用的话,也许可以使用一些cookie数据)。
链接地址: http://www.djcxy.com/p/68077.html上一篇: Spring MVC PRG pattern with multiple tabs session workaround