2011-05-18 100 views
5

我有一個庫方法Common.addTheUsualStuffToTheModel(model),需要在我的應用程序中的每個控制器方法中爲模型添加各種屬性。執行重複的Spring控制器代碼的最佳方法是什麼?

@RequestMapping(value = "/everypath", method = RequestMethod.GET) 
public final String everyHandler(ModelMap model) 
{ 
    model = Common.addTheUsualStuffToTheModel(model); 
    return "everyPage"; 
} 

到目前爲止,我已經加入這條線上所有的處理方法:

model = Common.addTheUsualStuffToTheModel(model); 

不過恐怕這不符合的原則是一致的「一次編寫,到處使用」。

如何避免在每個處理程序中重複此代碼?

回答

7

您可以使用interceptor<mvc:interceptors>

在你的攔截器,你可以添加任何東西作爲請求屬性(這實際上是在模型的屬性去)。攔截器代碼在每個方法之前或之後執行(匹配攔截器映射)。

如果你並不一定需要模型來之前填充控制方法,在postHandle方法你得到的ModelAndView對象。

+0

不錯,它看起來像使用postHandleRender方法,您甚至可以在呈現視圖之前獲取模型和添加東西,因此您不必將其添加爲請求屬性。 – digitaljoel 2011-05-18 18:02:40

+0

對不起,我給出了錯誤的鏈接 - 它應該是'servlet',而不是'portlet'。該servlet只有3種方法,其中模型僅在postHandle方法中可用。 – Bozho 2011-05-18 18:03:53

+0

@digitaljoel yup,補充說。 – Bozho 2011-05-18 18:04:54

0

如何指定@ModelAttribute帶註釋的引用數據提供者方法。如果您的所有控制器都有一個基類,並且該基類具有@ModelAttribute註釋方法,那麼我相信這些控制器處理的所有視圖中的數據都可以在模型中使用。看看15.3.2.8 in the Spring docs

相關問題