第一种:
通过RedirectAttributes自动封装参数到地址栏
redirectAttributes.addAttribute("param", value);
这种方式就相当于重定向之后,在url后面拼接参数,这样在重定向之后的页面或者控制器再去获取url后面的参数就可以了,但这个方式因为是在url后面添加参数的方式,所以暴露了参数,有风险
第二种:
attr.addFlashAttribute("param", value);
这种方式也能达到重新向带参,而且能隐藏参数,其原理就是放到session中,session在跳到页面后马上移除对象。所以你刷新一下后这个值就会丢掉
例:
1
2
3
|
attr.addFlashAttribute(
"status"
,
"999"
);
attr.addFlashAttribute(
"message"
,
"登录失败"
);
return
"redirect:/toLogin"
;
|
1)重定向到页面上,也就是说重定向的这个 页面视图,能用el表达式直接获取你带参的值,比如status 和message ,都能获取。
2)重定向到另一个Controller的时候,使用redirectAttributes.getFlashAttributes();没法获取这两个参数
需要使用
httpServletRequest 来获取参数
Map
<String, ?> map = RequestContextUtils.getInputFlashMap(request);
if (map != null) {
System.out.println(map.get("flashParams") + "这次终于取到啦");
}