浏览了一段时间并访问了几个网站后,我无法获得清晰度。所以请任何人解释我@ModelAttribute究竟做了什么
答案 0 :(得分:0)
Spring API文档通常非常好,所以我总是建议在尝试理解框架时作为起点。
@ModelAttribute的Javadocs说:
绑定方法参数或方法返回值的注释 到命名的模型属性,暴露给Web视图。支持的 用于{@link RequestMapping}带注释的处理程序类。
一般来说,@ModelAttribute
是控制器声明其返回值由Spring自动绑定到Model中的方法,并定义Spring自动绑定到方法参数中的Model值。
例如:
@ModelAttribute("myValue")
public Foo myValue()
{
return new MyFoo();
}
这基本上是对Spring的说法:
每当此Controller被映射为为请求提供服务时,请调用此方法并将返回值绑定到“myValue”键下的Model中。
这与:
相同@RequestMapping("/foo")
public ModelAndView foo()
{
ModelAndView mav = new ModelAndView("myView");
mav.addObject("myValue", new Foo());
return mav;
}
这里没有正确和错误的方法,它只是促进了建立模型的不同方式。
@ModelAttribute
注释也可用于控制器的方法参数。所以你可以拥有以下内容:
@RequestMapping("/doFoo")
public void doFoo(@ModelAttribute("myValue")Foo foo)
{
Do some stuff here...
}
同样,这是Spring提供的一种方便的方法,可以促进实现控制器的不同方式。它完全相同:
@RequestMapping("/doFoo")
public void doFoo(ModelAndView modelAndView)
{
Foo foo = (Foo)modelAndView.getModel().get("myValue");
Do some stuff here...
}
@SessionAttribute
以完全相同的方式工作,但顾名思义,该值绑定到用户的HTTPSession或从用户的HTTPSession读取。