首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Spring MVC中,如何在Post/Redirect/Get模式的请求之间传递数据?

在Spring MVC中,如何在Post/Redirect/Get模式的请求之间传递数据?
EN

Stack Overflow用户
提问于 2011-03-08 20:59:10
回答 2查看 16.3K关注 0票数 13

我有一个表单,可以使用POST signin.html提交用户的名字和姓氏

代码语言:javascript
复制
 @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请求重定向到相同的映射。

代码语言:javascript
复制
 @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的方法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-08 23:04:41

我如何知道/signin.html上GET请求来自重定向,而不是用户在浏览器中请求的?

  • 你可以在他们的会话中存储一个标记
  • 看看HTTP header

中的referer

我建议对“正确提交”消息使用某种基于会话的消息传递。这有时被称为“闪光”。StackExchange始终使用这些(显示在屏幕顶部的消息)。

提前谢谢你,但是我怎样才能从HttpServletRequest那里得到推荐人呢?

代码语言:javascript
复制
HttpServletRequest.getHeader("Referer")
票数 4
EN

Stack Overflow用户

发布于 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作用域通常用于传递消息,而不是模型对象。

票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5232789

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档