2015-10-29 30 views
1

这两者之间有什么区别,它们都暴露了变量JSP。第一种方法是标记为@ModelAttribute的方法。第二个将所需的对象放入ModelAndView。目标是为JSP检索此变量。@ModelAttribute方法和放入ModelAndView之间有区别吗?

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; 

} 

回答

1

的主要区别在于,一个是方法的注释,另一种是一个声明。

这意味着其他的事情。该注释将为控制器处理的每个请求公开您的对象,除非会抛出异常并引发异常处理程序。该声明仅适用于声明的处理程序方法。

当然,也有使用注释的另一种方式:在方法参数上,这也是处理HTML表单传输对象的常用方法。

至于一些主观的,自以为是的建议:

  1. 说法是,我想,通常的方式,因为它是很少,你想显露出相同的对象由处理所有类型的请求特定的控制器
  2. 方法返回值的注释(如在您的示例中)是暴露所谓的参考数据的一种很好的方式,如documentation中所述 - 例如,假设您的表单中有一个HTML <select>,并且您想要在控制器中提供<option>的列表,因为它们必须来自从JPA存储库中检索的一些数据 - t帽子是我过去如何使用它的;因为这种数据通常是在控制器处理的每种类型的请求上都需要的(假设控制器与某种形式有关),它将整理你的处理器方法,从而反复地将相同的参考数据添加到View Model
  3. 注解上如前所述,方法参数通常用于表单传输对象(即其类型字段包含表单数据的bean类) - 在窗体视图处理程序方法中,然后使用它自己的参数和表单提交中的处理方法您遵循@ModelAttribute注释参数与BindingResult类型参数
相关问题