2014-10-22 86 views
0

我使用帶Liferay 6.2GA的JBoss 7.1.1。 我需要在每個頁面上的portlet實例。 MVCPortlet類的構造函數僅在部署portlet後調用,因此它只是實例化一次(部署後)。如何實例化Liferay Portlet多次

我試圖

<instanceable>true</instanceable> 

在Liferay中,portlet.xml中,但這並沒有改變任何東西。

當我將portlet從「添加應用程序」菜單中拖出來放在一個剛創建的頁面上時,如何創建一個新的portlet實例?

爲了控制實例的數量,我所做的:

public class Controller extends MVCPortlet { 
private final static Logger log = Logger.getLogger("Controller"); 
private int instance = 0; 
public Controller() { 
     instance++; 
     log.info("instance: " + instance); 
    } 
} 
+0

爲什麼你需要調用每個添加的構造函數? – 2014-10-22 10:48:35

+0

我已經建立了項目的想法,它將被實例化爲每個頁面。我有一個特殊的應用程序,其中每個用戶只有一個頁面,但用戶沒有登錄。 – JeromeC 2014-10-22 11:29:51

回答

2

這不是你的業務實例的portlet類。門戶網站將爲您提供幫助。一個portlet在類中沒有狀態:只要你的portlet中有一個成員變量,保留任何個人狀態,這就是一個潛在的問題。

門戶通常只有一個portlet對象(就像使用servlet一樣)。 您希望添加到portlet本身的狀態的所有都會進入在各種生命週期方法中處理的請求和響應對象。

無論你試圖依賴多個(java)對象:這是錯誤的。你需要來改變你的架構

+0

這對我很難過,但謝謝。我沒有看到這種portlet的優點,我的意思是,一個jar可以運行在多臺pc上,爲什麼portlet不能運行在不同的頁面上。謝謝奧拉夫。 – JeromeC 2014-10-22 15:26:32

+0

當然,一個portlet可以在多個頁面上。只是完整狀態不在portlet對象本身中,而是在請求/響應或會話中。你希望每頁有一個對象,每個用戶一個,每個會話一個?那麼集羣節點(不同的JVM)呢?這個請求沒有意義,並且實現並不限制你*。這只是如何實現這個規範,並有一個明確的解決方案來實現您的基礎問題。這不僅僅是你設想的解決方案。 – 2014-10-23 08:28:55