使用 Portlet 会话

这是自 JSR 168 以来一直存在的一种方法。它允许我们使用 portlet 会话共享属性。一个 portlet 会话可以有不同类型的范围:

  1. Portlet 范围(仅在 portlet 中可用的属性)
  2. 应用范围(整个应用程序中可用的属性[war])

为了使用这种方法,我们不需要在 portlet 配置中创建任何条目,因为 portlet 会话在 portlet 请求中随时可用:

PortletSession session = renderRequest.getPortletSession();
session.setAttribute("attribute-name","attribute-value", PortletSession.APPLICATION_SCOPE);

要么

PortletSession session = renderRequest.getPortletSession();
session.setAttribute("attribute-name","attribute-value", PortletSession.PORTLET_SCOPE);

该属性只能从相应的范围中检索。与 portlet 范围中设置的属性类似,我们需要使用它来获取它

PortletSession session = renderRequest.getPortletSession();
String attributeValue = (String) session.getAttribute("attribute-name", PortletSession.PORTLET_SCOPE);

这种方法的主要限制是在应用程序范围之外缺少其他 portlet 之间的共享。为了克服这个问题,有一个 liferay 特定的方法来添加 <private-session-attributes> liferay-portlet.xml

    <private-session-attributes>false</private-session-attributes>
    <header-portlet-css>/css/main.css</header-portlet-css>
    <footer-portlet-javascript>/js/main.js</footer-portlet-javascript>
    <css-class-wrapper>{portlet-name}</css-class-wrapper>
</portlet>

对于所有设置和检索属性的 portlet。