SpringMVC中使用 RedirectAttributes 从一个controller重定向传值(参数)到另一个controller的方法:
介绍:RedirectAttributes是Spring mvc 3.1版本之后出来的一个功能,专门用于重定向之后还能带参数跳转的。
他有两种带参的方式:
第一种:
attr.addAttribute("param", value);
这种方式就相当于重定向之后,在url后面拼接参数,这样在重定向之后的页面或者控制器再去获取url后面的参数就可以了,但这个方式因为是在url后面添加参数的方式,所以暴露了参数,有风险。
attr.addAttribute("param1", "value1");
return "redirect:/index";
这样就相当于:return "redirect:/index?param1=value1"
第二种:
attr.addFlashAttribute("param", value);
这种方式也能达到重新向带参,而且能隐藏参数,其原理就是放到session中,session在跳到页面后马上移除对象,所以你刷新一下后这个值就会丢掉,这个方法适合用于防止刷新页面重复提交数据的问题。
具体使用方法:
controller:
@RequestMapping({"/","/index"})
public String login() {
return "Login";
}
@RequestMapping("info")
public String info(HttpSession session, RedirectAttributes attributes) {
if (session.getAttribute("UserSession") != null)
return "infoShow";
attributes.addFlashAttribute("info",
"<script type='text/javascript'>alert('请登录账户!')</script>");
return "redirect:index";
}
jsp页面:
<div>${info}</div>
这种方法传递的参数是可以被EL表达式获取的。
EL表达式无法获取传值的原因:
1,请检查你的“redirect:”的冒号后面有没有空格!这个问题会导致你的EL表达式无法获取你的传值!切记!不要加空格!不要加空格!不要加空格!重要的事情说三遍!
2,网络上还有种说法,说是因为接收参数值的 controller 没有加上@ModelAttribute的形参,导致无法接收,具体本人也没有出现过这问题,不是很清楚。