我的问题是:
我在一个名为first和second的门户服务器中部署了两个不同的 Portlets (只有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(第二个)时,我使用以下代码来检索在firstportlet中设置的session
。
第二个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
值,请问任何解决方案吗?
答案 0 :(得分:0)
portletSession.APPLICATION_SCOPE
机制使portlet可以共享会话数据(如果它们位于同一个portlet应用程序中)。如果您有两个不在同一个war
中的portlet,则它们不在同一个portlet应用程序中,因此,会话数据也不会共享。
要解决此问题,您需要将两个portlet放在同一个portlet应用程序中(相同的war
,相同的portlet.xml
,但仍然有两个不同的portlet。)
答案 1 :(得分:0)
DanielBarbarian的回答是正确的。要共享全局会话,portlet需要处于相同的战争中。但是还有其他方法可以在同一页面上的portlet之间共享数据,但不一定在同一个战争中。 (我假设您的门户网站容器支持JSR286标准)
网上有两个选项的例子。