簡體   English   中英

在服務器上獲取Portlet會話

[英]Get Portlet Session on server

我的問題是:
我在名為first和second的門戶服務器中部署了兩個不同的Portlet (除了war文件)。 每當用戶單擊firstportlet時,我都會使用以下代碼設置session對象!:

第一個portlet中的代碼:

String application="Welcome";
PortletRequest portletRequest = (PortletRequest) webAppAccess
                    .getHttpServletRequest()
                    .getAttribute(Constants.PORTLET_REQUEST);
portletRequest.getPortletSession(true).setAttribute("application",
                        sessionValue, 
                        PortletSession.APPLICATION_SCOPE);

log.Info("SESSION hole value:---" + portletRequest.getPortletSession(false));

每當用戶點擊secondportlet(二)我使用follwing代碼檢索session這是在入FirstPortlet設置。

第二個Portlet中的代碼:

PortletRequest portletRequest = (PortletRequest) webAppAccess
                    .getHttpServletRequest()
                    .getAttribute(Constants.PORTLET_REQUEST);


log.Info("SESSION hole value:---"+ portletRequest.getPortletSession(false));
log.Info("SESSION VALUE in second Portlet:----"
    + portletRequest.getPortletSession(false).getAttribute("application",
                             PortletSession.APPLICATION_SCOPE));

錯誤:

但是在第二個portlet中,我總是得到null值,請采取任何解決方案?

portletSession.APPLICATION_SCOPE機制使Portlet可以共享會話數據(如果它們位於同一Portlet應用程序中)。 如果您有兩個不在同一war中的portlet,那么它們不在同一portlet應用程序中,因此,會話數據也不會共享。

為了解決這個問題,您需要將兩個portlet放入同一個portlet應用程序中(相同的war ,相同的portlet.xml但仍然是兩個不同的portlet)。

DanielBarbarian的答案是正確的。 要共享全局會話,portlet必須處於同一戰場。 但是,還有其他方法可以在同一頁面上的portlet之間共享數據,但不一定要在同一戰爭中進行。 (我假設您的門戶網站容器支持JSR286標准)

  • 使用小組件間通信。 這樣可以通知其他portlet事件。 這是一個簡單的發布/訂閱系統,不難建立。
  • 使用全局渲染參數。

網上都有這兩個選項的示例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM