2015-10-29 54 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類型參數
相關問題