SessionAttributes和重定向

时间:2015-03-04 15:15:27

标签: spring spring-mvc

我在一个方法

中设置的Controller上有一个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";
}

变量不会在会话中结束。

重定向是否可能在此处产生问题?

2 个答案:

答案 0 :(得分:0)

在重定向上,您应该在方法签名中使用RedirectAttributes变量,而不是使用模型:

  redirectAttributes.addAttribute("approve", approve);

这与model的工作方式相同,但在这种情况下,您需要执行redirect:/

Documentation about RedirectAttributes

答案 1 :(得分: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

  

控制器可以使用的Model接口的特化   选择重定向方案的属性