2010-07-01 28 views
1

在網站中有許多頁面請求相同的模型屬性是很常見的,例如,呈現當前用戶名稱的標題或需要少量基於服務器的信息片段。標籤或頁面片段中使用的Spring-MVC通用模型屬性

... 
<body> 
<mytaglib:header/> 
... 
<jsp:include page="footer.jsp"/> 
... 
</body> 

最簡單的辦法是,你寫的每個控制器方法,返回使用的頁眉或頁腳還添加所有由它所包含的組件所需要的屬性,但隨着網站的發展就會變得難以處理意見特別是當您開始處理並非全部具有完全相同組件的頁面時。

有沒有一種方法來封裝基於子頁面或標籤添加到模型的邏輯?

回答

2

那麼,你可以用幾種方法做到這一點。記住下面的流行:

  1. 把你的邏輯在Filter是放在請求範圍的信息;

  2. Spring有一個類似於名爲Interceptor的過濾器。您可以將您的邏輯放在一邊,並將其保存在請求範圍內。

  3. 讓插入到頁面中的自定義標籤具有邏輯。這有一個缺點,因爲您必須在每個JSP中插入標籤。如果您使用像SiteMesh這樣的裝飾過濾器,那麼您可以將它放置在裝飾器JSP中一次,並完成它。

  4. 在父級控制器中擁有所有控制器將擴展的邏輯。

+0

我在我的應用程序中使用Apache Tiles作爲視圖技術。它有一個ViewPreparer的概念,我完全是用於這個目的。每個Tile將有一個ViewPreparer,並且只有當它的tile是當前視圖的一部分時才被調用。在View Preparer中,它將所有的數據放在它的tile/jsp所需的requestScope中。我認爲它很容易實現與任何視圖技術類似的東西。 – 2012-10-07 18:27:18

0

您是否特別使用框架?如果你只使用servlets,我建議你創建一個基本的servlet類,如果使用spring,我會建議你創建一個Base SPring MVC控制器。您是否可以從基類設置這些屬性或使用過濾器:)