gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 13:56:36 25 4
gpt4 key购买 nike

我有一个使用 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 吗?

最佳答案

您想要的行为称为“闪存范围”。它通常通过在 session 中存储重定向后显示的消息来实现。

Spring 团队 promise 在 Spring 3.1 (SPR-6464) 中实现它。同时你可以看看mvc-showcase中flash scope的实现。示例,这很容易,所以你可以自己做。

另一种方法是添加所需数据作为重定向 URL 的参数。请注意,如果您的提交方法保存模型对象以便以后可以通过某些标识符访问它,那么重定向到显示该对象的页面是有意义的(即 /users.html?userId=... 而不是 /signin.html),并在 Flash 范围内的该页面上显示“正确提交”消息。

因此,flash 作用域通常用于传递消息,而不是模型对象。

关于spring - 如何在 Spring MVC 中的 Post/Redirect/Get 模式请求之间传递数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5232789/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com