【问题标题】:SpringMVC : POST Redirect GET and error message?SpringMVC:POST重定向GET和错误消息?
【发布时间】:2026-01-07 02:10:02
【问题描述】:

我有一个带有表格和表格的页面。当我提交表单时,我希望它填满表格。

我尝试简单地返回视图名称,但它没有通过“Get”方法。

我看到了 Post Redirect Get 模式,所以我尝试了一下,它有效地刷新了页面。但是验证错误不会显示在标签中。

我在别处看到你可以使用 RedirectAttributes 和 flashAttribute 绑定结果,但它仍然不起作用。

我不知道做这件事的正常方式是什么。

这是我的代码:

@Controller
@RequestMapping("/settings")
public class SettingsController {
    @Autowired
    protected SettingsService settingsService;

    @RequestMapping(method = RequestMethod.GET)
    public void loadSettings(Model model) {
        model.addAttribute("settings", new Settings());
        model.addAttribute("settingsList", settingsService.getAllSettings();
    }

    @RequestMapping(value = "/add", method = RequestMethod.POST)
    public String saveSettings(@ModelAttribute("settings") @Valid Settings settings, Errors errors, RedirectAttributes redirectAttributes) {
       // code

        redirectAttributes.addFlashAttribute("settings", settings);
        redirectAttributes.addFlashAttribute("org.springframework.validation.BindingResult.settings", errors);
        return "redirect:/settings";
    }
}

【问题讨论】:

  • 这个和*.com/q/9329741/217324一样吗?
  • 这是同一个问题,但答案是一个 hack,这意味着它不是 spring 想要的“正常方式”。由于 spring-mvc 1 我们必须发布然后显示结果。怎么做起来还这么复杂?

标签: java spring spring-mvc


【解决方案1】:

我成功了,但我不知道为什么:

而不是这个:

 @RequestMapping(method = RequestMethod.GET)
    public void loadSettings(Model model) {
        model.addAttribute("settings", new Settings());
        model.addAttribute("settingsList", settingsService.getAllSettings();
    }

我有这个:

 @RequestMapping(method = RequestMethod.GET)
    public void loadSettings(Model model) {
        if (!model.containsAttribute("settings")) {
          model.addAttribute("settings", new Settings());
        }
        model.addAttribute("settingsList", settingsService.getAllSettings();
    }

它可以工作,但表单会保留发布的数据。这是一个或另一个:/

【讨论】: