Search code examples
jsf-2liferayportlet

PortletSession using JSF Liferay Portlets


I am developing a JSF 2 Portlet, but i need get global session variable.

The request works fine with:

FacesContext facesContext = FacesContext.getCurrentInstance();
    PortletRequest request = (PortletRequest) facesContext.getExternalContext().getRequest();

But the session is null:

PortletSession session = request.getPortletSession(false);

if put this code in liferay-portlet.xml file works fine, but i can't do IPC: Inter Portlet Comunication

<!-- Portlet session -->
    <private-request-attributes>false</private-request-attributes>
    <private-session-attributes>false</private-session-attributes>

How i get and set variables session without use the last code?

Thanks

Today i i tried with this:

FacesContext facesContext = FacesContext.getCurrentInstance(); 
PortletRequest request = (PortletRequest) facesContext.getExternalContext().getRequest(); 
HttpServletRequest httpRequest = PortalUtil.getHttpServletRequest(request); 
HttpSession session = httpRequest.getSession(true); 
System.out.println(session.getAttribute("XXXX"));

but is null


Solution

  • Warning: Using <private-session-attributes>false</private-session-attributes> with Liferay Faces has been known to cause memory leaks. Use at your own risk!

    I solved my problem configuring liferay-portlet.xml

    1.) I changed the liferay-portlet.xml only with:

    <private-session-attributes>false</private-session-attributes>
    

    2.) In the Java Class i created method:

    FacesContext facesContext = FacesContext.getCurrentInstance();
    PortletRequest request = (PortletRequest) facesContext.getExternalContext().getRequest();
    PortletSession session = request.getPortletSession(false);
    

    If you get session attributes

    session.getAttribute("XXXXXX",PortletSession.APPLICATION_SCOPE);
    

    If you set session attributes

    session.setAttribute("NAME","VALUE",PortletSession.APPLICATION_SCOPE);