Spring @ModelAttribute不应该添加属性来查看?

时间:2015-12-01 20:11:31

标签: java spring spring-mvc modelattribute

据我所知,@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

,它不应该已经存在吗?

1 个答案:

答案 0 :(得分:1)

在返回值的方法中使用@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";
}

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