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

新手上路,请多包涵

我试图弄清楚如何“保留” 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";
}

原文由 Taylor Leese 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 478
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";
}

原文由 Oscar 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题