[英]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標准)
網上都有這兩個選項的示例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.