我在一个方法
中设置的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";
}
变量不会在会话中结束。
重定向是否可能在此处产生问题?
答案 0 :(得分:0)
在重定向上,您应该在方法签名中使用RedirectAttributes
变量,而不是使用模型:
redirectAttributes.addAttribute("approve", approve);
这与model
的工作方式相同,但在这种情况下,您需要执行redirect:/
答案 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接口的特化 选择重定向方案的属性