Spring @ModelAttribute 不应该将属性添加到视图?

Spring @ModelAttribute shouldn't add the attribute to view?

据我了解,@ModelAttribute 注释用于将属性置于视图模型中。我找到了名为 Handling form submission 的官方 Spring 指南,还有一个带有 @ModelAttribute:

的简单控制器示例
@Controller
public class GreetingController {

    @RequestMapping(value="/greeting", method=RequestMethod.GET)
    public String greetingForm(Model model) {
        model.addAttribute("greeting", new Greeting());
        return "greeting";
    }

    @RequestMapping(value="/greeting", method=RequestMethod.POST)
    public String greetingSubmit(@ModelAttribute Greeting greeting, Model model) {
        model.addAttribute("greeting", greeting);
        return "result";
    }

}

为什么在最后一个方法中手动添加了模型属性?由于 @ModelAttribute,它不应该已经存在了吗?

当您在 return 一个值的方法中使用 @ModelAttribute 时,Spring将该值添加到模型中,然后您可以在视图中使用它。

@ModelAttribute("countries")
public List findAllCountries() {
   return countryService.findAllCountries();
}

但是,如果您在使用 requestMapping 注释的方法中像方法参数一样使用它,Spring 将在 jsp 页面中关联表单。在这段代码中

@RequestMapping(value="/greeting", method=RequestMethod.POST)
public String greetingSubmit(@ModelAttribute Greeting greeting, Model model)    {
    model.addAttribute("greeting", greeting);
    return "result";
}

您正在获取表单值,因此您需要将其添加到模型中以便在视图中使用该值。