原理
重定向时使用RedirectAttributes传递参数
-
redirectAttributes.addAttributie("key", value); 该方法相当于在重定向链接地址追加传递的参数,比如:
return "redirect:/重定向目标页面url?key=value"
注意:这种方法直接将传递的参数暴露在链接地址上,不安全,慎用。 -
redirectAttributes.addFlashAttributie("key", value); 该隐藏了参数,链接地址不直接暴露,但只能在重定向的 “页面” 获取参数的值。 原理:将设置的属性放到 session 中,session中的属性在重定向到目标页面后马上销毁。
重定向目标页面接收参数
- redirectAttributes.addFlashAttribute() 中放入的数据可以使用以下方式接收:
- 使用
@ModelMap
接收 - 使用
@ModelAttribute
接收
- 使用
- redirectAttributes.addAttribute() 中放入的数据
- 使用
@RequestParam
接收
- 使用
示例一
@Controller
@RequestMapping("/province")
public class ProvinceController {
@GetMapping("/b/batchDel")
String batchDel(RedirectAttributes redirectAttributes) {
redirectAttributes.addFlashAttribute("msg", "成功");
return "redirect:/province/b/list";
}
@GetMapping("/b/list")
public ModelAndView list(ModelAndView mav, @ModelAttribute("msg") String msg) {
mav.setViewName("backend/province_list");
mav.addObject("msg",msg);
return mav;
}
}
示例二
@Controller
@RequestMapping("/province")
public class ProvinceController {
@GetMapping("/b/batchDel")
String batchDel(RedirectAttributes redirectAttributes) {
Map<String, String> map = new HashMap<>();
map.put("key1", "1001");
map.put("key2", "1002");
redirectAttributes.addFlashAttribute("map", map);
return "redirect:/province/b/list";
}
@GetMapping("/b/list")
public ModelAndView list(ModelAndView mav, @ModelAttribute("map") Map<String, String> map) {
mav.setViewName("backend/province_list");
mav.addObject("key1",map.get("key1"));
mav.addObject("key2",map.get("key2"));
return mav;
}
}