我试图弄清楚如何“保留” BindingResult,以便可以通过Spring <form:errors>标记在随后的GET中使用它。我要这样做的原因是由于Google App Engine的SSL限制。我有一个通过HTTP显示的表单,该帖子发布到HTTPS URL。如果我仅转发而不是重定向,则用户将看到https://whatever.appspot.com/my/form URL。我正在努力避免这种情况。任何想法如何解决这个问题?
<form:errors>
以下是我要执行的操作,但是使用时我只会看到验证错误return "create"。
return "create"
@RequestMapping(value = "/submit", method = RequestMethod.POST) public final String submit( @ModelAttribute("register") @Valid final Register register, final BindingResult binding) { if (binding.hasErrors()) { return "redirect:/register/create"; } return "redirect:/register/success"; }
从Spring 3.1开始,你可以使用RedirectAttributes。在执行重定向之前,添加你希望具有的属性。添加BindingResult和用于验证的对象,在本例中为Register。
对于BindingResult,你将使用名称:“ org.springframework.validation.BindingResult。[ModelAttribute的名称]”。
对于用于验证的对象,将使用ModelAttribute的名称。
要使用RedirectAttributes,你必须将此添加到配置文件中。你还告诉Spring使用一些较新的类:
<mvc:annotation-driven />
现在,无论你将重定向到哪里,都将显示错误
@RequestMapping(value = "/submit", method = RequestMethod.POST) public final String submit(@ModelAttribute("register") @Valid final Register register, final BindingResult binding, RedirectAttributes attr, HttpSession session) { if (binding.hasErrors()) { attr.addFlashAttribute("org.springframework.validation.BindingResult.register", binding); attr.addFlashAttribute("register", register); return "redirect:/register/create"; } return "redirect:/register/success"; }