我有一个表单,可以使用POST signin.html提交用户的名字和姓氏
@RequestMapping(value="/signin.html",method = RequestMethod.POST)
public ModelAndView submit(@Valid User user){
ModelAndView mv = new ModelAndView("redirect:signin.html");
//Business logic with user account
return mv;
} 为了解决双重提交问题,我使用GET请求重定向到相同的映射。
@RequestMapping(value="/signin.html",method = RequestMethod.GET)
public ModelAndView submitPRG(){
ModelAndView mv = new ModelAndView("submitted");
mv.addObject("message", "Submitted Correctly");
return mv;
}这样我就解决了双重提交问题。
我有几个问题:
1)如何知道/signin.html上的GET请求来自重定向,而不是用户在浏览器中请求的?我只想关闭选项,让用户浏览http://server/signin.html,并得到“提交正确”的消息。我知道我可以添加像/signin.html?submitted=true这样的东西,但我想让它更干净。
2)有没有办法将ModelAndView对象从submit()传递到submitPRG()
或者,在这种情况下,是否有其他使用PRG的方法?
发布于 2011-03-08 23:04:41
我如何知道/signin.html上GET请求来自重定向,而不是用户在浏览器中请求的?
中的referer
我建议对“正确提交”消息使用某种基于会话的消息传递。这有时被称为“闪光”。StackExchange始终使用这些(显示在屏幕顶部的消息)。
提前谢谢你,但是我怎样才能从HttpServletRequest那里得到推荐人呢?
HttpServletRequest.getHeader("Referer")发布于 2011-03-08 23:02:26
你想要的行为被称为“闪存作用域”。它通常是通过在会话中存储重定向后显示的消息来实现的。
Spring团队承诺在Spring3.1 (SPR-6464)中实现它。同时,您可以在mvc-showcase示例中查看flash scope的实现,它非常简单,因此您可以自己完成。
另一种方法是将所需数据作为参数添加到重定向URL。请注意,如果您的submit方法保存了模型对象,以便以后可以通过某个标识符访问它,则有必要重定向到显示该对象的页面(即/users.html?userId=...而不是/signin.html),并在该页面上显示flash作用域中的"Submitted submit“消息。
因此,flash作用域通常用于传递消息,而不是模型对象。
https://stackoverflow.com/questions/5232789
复制相似问题