2014-09-04 54 views
1

其實我想分享在2個不同的插件項目2個portlet之間的數據在Liferay的共享portlet會話數據需要幫助

下面是我跟着共享數據的步驟:

第一步:創建命名爲Senderproj和Senderport下創建一個Portlet Liferay的插件項目,然後寫下面的代碼在doView方法

PortletSession session=req.getPortletSession(); 
String s="naresh"; 
session.setAttribute("gates",s,PortletSession.APPLICATION_SCOPE); 

第二步:創建命名爲Receiverproj和Liferay的插件項目創建命名爲Receiverport一個門戶然後令狀下文E代碼在doView方法

PortletSession ps = req.getPortletSession(); 
String tabName = (String)ps.getAttribute("gates",PortletSession.APPLICATION_SCOPE); 
System.out.println("this is from doView of ipc receiver portlet"+tabName); 

步驟3:我加入的liferay-portlet.xml中屬性像下面

<private-session-attributes>false</private-session-attributes> 

當我在門戶頁面滴2周的portlet我在得到會話null值Receiverport。

任何一個可以幫忙

回答

0

拳檢查<private-session-attributes>false</...>在兩個portles(發送器和接收器)設置正確。使用APPLICATION_SCOPE

然後,設置和獲取會話屬性:

renderRequest.getPortletSession().setAttribute(
    "name", "some value", PortletSession.APPLICATION_SCOPE 
); 

renderRequest.getPortletSession().getAttribute(
    "name", PortletSession.APPLICATION_SCOPE 
); 

到目前爲止,似乎這就是你已經做什麼。

如果它們在同一頁面上,我們必須確保它們按正確的順序加載。在Liferay中,可以通過設置render-weight來實現。 (在真實的情況下,最好是不依賴於它們加載的順序)

<!-- Sender --> 
<portlet> 
    <portlet-name>test-a</portlet-name> 
    <icon>/icon.png</icon> 
    <instanceable>true</instanceable> 
    <private-session-attributes>false</private-session-attributes> 
    <render-weight>3</render-weight> 
    ... 
</portlet> 

<!-- Receiver --> 
<portlet> 
    <portlet-name>test-b</portlet-name> 
    <instanceable>true</instanceable> 
    <icon>/icon.png</icon> 
    <private-session-attributes>false</private-session-attributes> 
    <render-weight>2</render-weight> 
    ... 
</portlet> 

此外,該鏈接可能會有所幫助: Liferay Session Sharing Demystified