RedirectAttributes工具的介绍

在Controller中用户保存或修改后,为了防止用户刷新浏览器(F5)导致表单重复提交,一般在保存或修改操作成功之后会redirect到一个结果页面(不是forward),同时可携带参数,如操作成功的提示信息等等。

因为是Redirect(重定向),request里的的值(getAttribute())在重定时超越作用域值会无法过去。

Spring在3.1提供了 个新的能力–RedirectAttributes,原理是把值放在session中重定向完成后再清空sesison。反复按F5,操作成功的提示信息也不会再次出来(总共只出现一次),效果很理想。

使用方法:redirectAttributes.addFlashAttribute("flag", 10);   (flag变量只显示一次,第二次刷新就不显示出来)。

重定向到Controller时,想取出"flag",可以使用如下方法:Map<String, Object> modelMap = (Map<String, Object>)RequestContextUtils.getInputFlashMap(request);

重定向到Controller时,想取出"flag",可以使用如下方法:@ModelAttribute (value="flag") 。

注意 request.getParameter("") \ request.getAttribute(name)方法都无法取出flag来。

redirectAttributes.addAttribute("param", value); 这种方式就相当于在url后面拼接参数再重定向。

如果:URL是: /accounts/{id }   这种的,应如下写

redirectAttrs.addAttribute("id", account.getId());

redirectAttrs.addFlashAttribute("message", "Account created!");

return " redirect:/accounts/{id }";