在我的Liferay 7主题中,我想记住用户点击的最后一页。所以,在我的主题中,我有以下内容:
<#if nav_item.isSelected()>
${request.getSession().setAttribute("LAST_ACTIVE",nav_item.getName())}
</#if>
在我的portlet JSP中,我想要检索值:
request.getSession().getAttribute("LAST_ACTIVE")
但是,我总是得到一个null
值,可能是因为每个请求都重新创建了会话。如何存储值以使其持续多个请求?
答案 0 :(得分:1)
Portles(来自您提到的.jsp)可能有一个私有portlet范围的会话,它不需要与主题的会话完全相等。
您应该在前面添加LIFERAY_SHARED_
作为会话属性的前缀。
如果这不起作用,您可以尝试在读取和写入会话属性时添加PortletSession.APPLICATION_SCOPE
作为附加范围参数。
答案 1 :(得分:1)
我建议你从另一边看问题。会话方法并不错,但可能更好的方法是使用过滤器或预先操作来填充请求属性。优点是,您可以将属性设置为实际更改。通过主题会话方法,您总是有点落后。
答案 2 :(得分:1)
根据您的评论,将我对安德烈问题的评论提升为答案:
主题中的 ${request.getClass().getName()}
通常会显示HttpServletRequest
的后代,而portlet通常使用PortletRequest
- 这些是不同的元素(如此处列出的私有属性除非明确共享)。
在portlet JSP中,请注意${request}
由 JSP Spec 预定义为HttpServletRequest
(因此在portlet中通常无用),而 Portlet Spec 定义${renderRequest}
。确保在JSP中使用正确的一个。在portlet世界中,这通常是后者。