29 июн. 2015 г.

Spring MVC. Особенности работы с RedirectAttributes

В Spring MVC есть такой объект, как RedirectAttributes. Служит он для передачи параметров между запросами при редиректе. У него есть несколько методов, среди которых два особо интересных:





  • ra.addAttribute("name1", value1); 
  • ra.addFlashAttribute("name2", value2);

  • Допустим, у нас есть форма, на ней 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";
    }

    Теперь, как нам перехватить, посмотреть, изменить значения атрибутов, которые мы передали в предыдущем методе, когда произошел редирект?

    @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";
    }

    Комментариев нет:

    Отправить комментарий

    Спрашивайте, критикуйте, оставьте свое мнение