通过RedirectionAttributes传递BindingResult
问题内容:
我被困试图通过RedirectionAttributes传递BindingResult:
我已经在POST之后引用了Spring-Redirect(即使有验证错误),但仍然遇到问题。
我有一个GET方法:
@RequestMapping(value = "/test", method = RequestMethod.GET)
public String test(@ModelAttribute("exampleForm") final ExampleForm exampleForm, final Model model)
{
return "test";
}
和POST方法:
@RequestMapping(value = "/doSomething", method = RequestMethod.POST)
public String doSomething(@Valid @ModelAttribute("exampleForm") final ExampleForm exampleForm, final BindingResult bindingResult, final RedirectAttributes redirectAttributes)
{
if (bindingResult.hasErrors())
{
redirectAttributes.addFlashAttribute("org.springframework.validation.BindingResult.exampleForm", bindingResult);
redirectAttributes.addFlashAttribute("exampleForm", exampleForm);
return "redirect:/test";
}
}
但是,当我在POST方法中收到绑定错误时,在GET方法的模型中(重定向后)我没有看到它们-它们似乎消失了。
这是POST方法中的bindingResult对象:
org.springframework.validation.BeanPropertyBindingResult: 1 errors
这是GET方法中的模型条目,显示0个错误:
org.springframework.validation.BindingResult.exampleForm=org.springframework.validation.BeanPropertyBindingResult: 0 errors
任何帮助将非常感激。
问题答案:
一种可能解决该问题的方法。会话属性有助于在请求之间持久化对象,因此基于它的以下内容
@Controller
@SessionAttributes(
{ "exampleForm" })
public class HomeController
{
@ModelAttribute("exampleForm")
public ExampleForm getExampleForm()
{
return new ExampleForm();
}
@RequestMapping(value = "/myform", method = RequestMethod.POST)
public String proccessForm(@Valid @ModelAttribute("exampleForm")
final ExampleForm form, final BindingResult result,
final SessionStatus sessionStatus)
{
if (result.hasErrors())
{
return "redirect:/myform";
}
sessionStatus.setComplete();
return "redirect:/complete";
}
@RequestMapping(value = "/myform", method = RequestMethod.GET)
public String showForm(final Model model)
{
return "form";
}
@RequestMapping(value = "/complete", method = RequestMethod.GET)
public String showSomething(final Model model)
{
return "complete";
}
}