使用 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。