В Spring MVC есть такой объект, как RedirectAttributes. Служит он для передачи параметров между запросами при редиректе. У него есть несколько методов, среди которых два особо интересных:
ra.addAttribute("name1", value1);
ra.addFlashAttribute("name2", value2);
Допустим, у нас есть форма, на ней 2 input'a: value1 и value2. Мы нажимаем submit и попадаем в наш контроллер, в метод postMethod().
Берем эти 2 значения и первое добавляем в RedirectAttributes, как обычный атрибут, второе - как FLASH атрибут.
Теперь, как нам перехватить, посмотреть, изменить значения атрибутов, которые мы передали в предыдущем методе, когда произошел редирект?
Допустим, у нас есть форма, на ней 2 input'a: value1 и value2. Мы нажимаем submit и попадаем в наш контроллер, в метод postMethod().
Берем эти 2 значения и первое добавляем в RedirectAttributes, как обычный атрибут, второе - как FLASH атрибут.
@RequestMapping(value = "/post", method = RequestMethod.POST)
String postMethod(@ModelAttribute("value1") String value1, @ModelAttribute("value2") String value2, RedirectAttributes ra) {
//добавляем атрибуты
ra.addAttribute("value1", value1);
ra.addFlashAttribute("value2", value2);
return "redirect:/get";
}
String postMethod(@ModelAttribute("value1") String value1, @ModelAttribute("value2") String value2, RedirectAttributes ra) {
//добавляем атрибуты
ra.addAttribute("value1", value1);
ra.addFlashAttribute("value2", value2);
return "redirect:/get";
}
Теперь, как нам перехватить, посмотреть, изменить значения атрибутов, которые мы передали в предыдущем методе, когда произошел редирект?
@RequestMapping(value = "/get", method = RequestMethod.GET)
String getMethod(Model model, HttpServletRequest req, RedirectAttributes ra) {
//получаем InputFlashMap c HttpServletRequest'a
Map<String, Object> map = (Map<String, Object>) RequestContextUtils.getInputFlashMap(req);
//получение атрибута "value1" (был добавлен, как ra.addAttribute())
String v1 = req.getParameterValues("value1")[0];
//получение атрибута "value2" (был добавлен, как ra.addFlashAttribute())
String v2 = model.asMap().get("value2"); //т.к. он добавился в model
//или
v2 = map.get("value2"); //получение из InputFlashMap
return "view";
}
String getMethod(Model model, HttpServletRequest req, RedirectAttributes ra) {
//получаем InputFlashMap c HttpServletRequest'a
Map<String, Object> map = (Map<String, Object>) RequestContextUtils.getInputFlashMap(req);
//получение атрибута "value1" (был добавлен, как ra.addAttribute())
String v1 = req.getParameterValues("value1")[0];
//получение атрибута "value2" (был добавлен, как ra.addFlashAttribute())
String v2 = model.asMap().get("value2"); //т.к. он добавился в model
//или
v2 = map.get("value2"); //получение из InputFlashMap
return "view";
}
Комментариев нет:
Отправить комментарий
Спрашивайте, критикуйте, оставьте свое мнение