据我所知,@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
?
答案 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";
}
您正在获取表单值,因此您需要将其添加到模型中才能使用视图中的值。