2015-03-04 2 views
1

У меня есть ключ SessionAttributes на контроллер, который я установил в методеSessionAttributes и перенаправлять

@Controller 
@RequestMapping(method = RequestMethod.POST, value="/") 
@SessionAttributes("approve") 
public class MyController{ 
    @RequestMapping 
    public String do(
     @ModelAttribute("vo") CommandVO vo, 
     @RequestParam("approve") boolean approve, 
     BindingResult result, 
     ModelMap model, 
     RedirectAttributes redirectAttributes, 
     NativeWebRequest request 
) 
    model.setAttribute("approve",approve); 
    [...] 
    return "redirect:/bla"; 
} 

переменная не заканчивается в сессии.

Возможно ли, что перенаправление создает проблему здесь?

ответ

0

На перенаправляет вы должны использовать переменную RedirectAttributes в вашей подписи методы вместо использования модели:

redirectAttributes.addAttribute("approve", approve); 

Это работает точно так же, как и model, но это специализация для этого раза, что вам нужно сделать redirect:/

Documentation about RedirectAttributes

0

Измените метод, чтобы поместить ваши параметры в RedirectAttributes, а не модели. Если вы хотите получить доступ к своему параметру с другого контроллера, вы можете использовать метод addFlashAttribute() (см. FlashMap), в противном случае нормальный addAttribute() также будет работать.

@Controller 
@RequestMapping(method = RequestMethod.POST, value="/") 
@SessionAttributes("approve") 
public class MyController{ 
    @RequestMapping 
    public String do(
     @ModelAttribute("vo") CommandVO vo, 
     @RequestParam("approve") boolean approve, 
     BindingResult result, 
     ModelMap model, 
     RedirectAttributes redirectAttributes, 
     NativeWebRequest request 
) 
    redirectAttributes.addFlashAttribute("approve",approve); 
    // or redirectAttributes.addAttribute("approve",approve); 

    return "redirect:/bla"; 
} 

От docs

специализации интерфейса модели, что контроллеры могут использовать для выбирать атрибуты для перенаправления сценария

Смежные вопросы