gpt4 book ai didi

spring - 通过 RedirectionAttributes 传递 BindingResult

转载 作者:IT老高 更新时间:2023-10-28 13:45:39 39 4
gpt4 key购买 nike

我试图通过 RedirectionAttributes 传递 BindingResult:

我已引用 Spring - Redirect after POST (even with validation errors) ,但还是卡住了。

我有一个 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 方法模型中的绑定(bind)错误(重定向后)时,它们似乎消失了。

这里是 POST 方法中的 bindingResult 对象:org.springframework.validation.BeanPropertyBindingResult: 1 个错误

这是 GET 方法中显示 0 个错误的模型条目:org.springframework.validation.BindingResult.exampleForm=org.springframework.validation.BeanPropertyBindingResult: 0 个错误

任何帮助将不胜感激。

最佳答案

这类似于 Cyril Deba 的回答,但您可以使用 flash 属性而不是 @SessionAttributes 来完成。关键是,如果您将 @ModelAttribute 用于在 GET RequestMapping 方法上制作表单,它看起来不会保留来自重定向 flash 属性的数据,但如果您将新表单对象作为它自己的方法,那么它仅在模型尚未包含它时才使用它。我还没有找到来自 Spring 的文档说明它以这种方式工作,或者为什么它们似乎工作方式不同,但类似于以下工作:

@Controller
public class MyFormController {

@ModelAttribute("myForm")
public MyForm newMyForm() {
return new MyForm();
}

@RequestMapping(value = "/myForm/", method = RequestMethod.GET)
public String showMyForm() {
return "myForm";
}

@RequestMapping(value = "/myForm/", method = RequestMethod.POST)
public String processMyForm(
@Valid @ModelAttribute("myForm") final MyForm myForm,
final BindingResult bindingResult,
final RedirectAttributes redirectAttributes) {
final String view;
if (bindingResult.hasErrors()) {
redirectAttributes.addFlashAttribute("org.springframework.validation.BindingResult.myForm", bindingResult);
redirectAttributes.addFlashAttribute("myForm", myForm);
view = "redirect:/myForm/";
} else {
// Success
view = "redirect:/";
}
return view;
}
}

关于spring - 通过 RedirectionAttributes 传递 BindingResult,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15903238/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com