一尘不染

POST后重定向(即使有验证错误)

spring

我试图弄清楚如何“保留” BindingResult,以便可以通过Spring <form:errors>标记在随后的GET中使用它。我要这样做的原因是由于Google App Engine的SSL限制。我有一个通过HTTP显示的表单,该帖子发布到HTTPS URL。如果我仅转发而不是重定向,则用户将看到https://whatever.appspot.com/my/form URL。我正在努力避免这种情况。任何想法如何解决这个问题?

以下是我要执行的操作,但是使用时我只会看到验证错误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";
}

阅读 444

收藏
2020-04-12

共1个答案

一尘不染

从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";
}
2020-04-12