原文链接:http://blog.youkuaiyun.com/z69183787/article/details/52596995
(友情提示:如果不是必须重定向,可以用forward转发,不会清空~)
SpringMVC controller重定向后,session将会清空,传值问题解决方法:
1. url拼接
2.利用RedirectAttributes自动拼接
redirectAttributes.addAttribute("error",error);
***3.利用RedirectAttributes传入session
redirectAttributes.addFlashAttribute("error", error);
存入的值可以在jsp中用EL表达式直接取用,但是这个方法在刷新页面后session就失效了,比较适合传递错误信息等,避免刷新的表单重新提交问题。
可是其他情况怎么办,如登录重定向,需要传递用户数据?
解决方法:重定向到controller,在controller中将flashMap中的session值取出来,存入新的session。
后台Controller取FlashMap值的具体操作:
方法一:利用httpServletRequest
public String test2(HttpServletRequest request)
{
Map<String,?> map = RequestContextUtils.getInputFlashMap(request);
System.out.println(map.get("test").toString());
return "/test/hello";
}
方法二:利用Spring提供的标签@ModelAttribute
public String test2(@ModelAttribute("test") String str)
{
System.out.println(str);
return "/test/hello";
}
(PS:登录重定向传值问题耗了我好长时间,终于功夫不负有心人,找到了取FlashMap值的方法,感谢原文大大,【比心】~~)
个人疑问:
我记得以前不用SpringMVC的时候,写java ee项目,重定向以后session照常用啊,并不会清空,毕竟是同一项目下跳转,又不是不同项目。
想请教一下,这是SpringMVC的特殊的不科学的设定么0 0