Liferay 7无法设置全局会话属性
我正在尝试设置会话属性[HTTP或Portlet会话],以便全局访问它(通过门户)。但是在获取会话属性时,它会返回null而不是实际值 设置会话属性: 在不同的Portlet中获取会话属性:Liferay 7无法设置全局会话属性,liferay,liferay-7,Liferay,Liferay 7,我正在尝试设置会话属性[HTTP或Portlet会话],以便全局访问它(通过门户)。但是在获取会话属性时,它会返回null而不是实际值 设置会话属性: 在不同的Portlet中获取会话属性: 我们在使用LR7.0时遇到了相同的问题。我不确定那是虫子还是什么。但作为一种解决办法,我们做了些什么。我们正在进行原始会话 HttpServletRequest httpRequest=PortalTil.getOriginalServletRequest(PortalTil.getHttpServletR
我们在使用LR7.0时遇到了相同的问题。我不确定那是虫子还是什么。但作为一种解决办法,我们做了些什么。我们正在进行原始会话 HttpServletRequest httpRequest=PortalTil.getOriginalServletRequest(PortalTil.getHttpServletRequest(renderRequest)); HttpSession session=httpRequest.getSession(); session.setAttribute(“testAttr”、“hi”)
希望有帮助 这不是一个bug!Liferay是一个portlet容器,在portlet规范中,每个portlet都是具有不同会话的不同上下文。您试图在一个portlet会话中保存数据,并在另一个portlet会话中恢复数据,这是不正确的。Liferay提供了获取门户全局会话的方法:
PortalSessionThreadLocal.getHttpSession();
此会话可以从门户的每个portlet中检索,但重要的是指定在集群环境中强烈不鼓励在全局会话中保存数据,这主要是因为如果您从仅存在于portlet中的类中保存实例,则可以从不知道该类的其他portlet中获取ClassNotFoundException。建议仅在保存基本数据时使用全局会话
@Component(
immediate = true,
property = {
"com.liferay.portlet.display-category=IPC Receiver",
"com.liferay.portlet.instanceable=true",
"javax.portlet.display-name=IPC_Receiver Portlet",
"javax.portlet.init-param.template-path=/",
"javax.portlet.init-param.view-template=/view.jsp",
"javax.portlet.resource-bundle=content.Language",
"com.liferay.portlet.private-session-attributes=false",
"javax.portlet.security-role-ref=power-user,user"
},
service = Portlet.class
)
public class ipcreceiverPortlet extends MVCPortlet
{
public void doView(RenderRequest renderRequest, RenderResponse renderResponse) throws IOException, PortletException
{
//HttpSession
HttpServletRequest httpreq = PortalUtil.getHttpServletRequest(renderRequest);
HttpSession session = httpreq.getSession();
String name = (String)session.getAttribute("transfer");
System.out.println("Session value through HttpSession:"+name);
//PortletSession
PortletSession portletsession = renderRequest.getPortletSession();
String userName = (String) portletsession.getAttribute("sendvalue",PortletSession.APPLICATION_SCOPE);
System.out.println("\nSession value through PortletSession:"+userName);
}
}
PortalSessionThreadLocal.getHttpSession();