具有多个选项卡会话解决方案的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

下一篇: Junit test case for spring MVC with RestEasy