这两者之间是否存在差异,它们都将变量暴露给JSP
。第一种是标有@ModelAttribute
的方法。第二个将所需对象放入ModelAndView
。目标是JSP
检索此变量。
1)
@ModelAttribute("store_location_types")
public StoreLocationType[] getStoreLocationTypes() {
return StoreLocationType.values();
}
2)
public ModelAndView handlePage(Model m) {
ModelAndView mav = new ModelAndView("my.jsp");
mav.addObject("store_location_types", StoreLocationType.values();
//...
return mav;
}
答案 0 :(得分:1)
主要区别在于一个是方法注释,另一个是语句。
这意味着其他事情。除非抛出异常并触发异常处理程序,否则注释将为控制器处理的每个请求公开您的对象。该语句仅适用于它声明的处理程序方法。
当然,还有另一种使用注释的方法:在方法参数上,这也是处理HTML表单传输对象的常用方法。
至于一些主观的,自以为是的建议:
<select>
in一个表单,你想在控制器中提供<option>
的列表,因为它们必须来自从JPA存储库中检索到的一些数据 - 这是我以前使用它的方式;因为控制器处理的每种类型的请求通常都需要这种数据(假设控制器与某种形式相关),它会使处理程序方法不再重复地将相同的参考数据添加到视图模型@ModelAttribute
类型参数的BindingResult
带注释的参数答案 1 :(得分:0)
在你使用它们的方式中,它们是相同的。 @ModelAttribute将对象添加到Model。您可以从视图中访问它。
@ModelAttribute你也可以像参数
一样使用它