原理

重定向时使用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;
    }
}