简体   繁体   中英

Attribute set in portlet session is not available in servlet session

Post on Liferay Forums: https://www.liferay.com/community/forums/-/message_boards/message/47412302

I have a simple application setup within a JSR-286 portlet to retrieve the value from a Portlet session.attribute

doView() method:

public void doView(RenderRequest renderRequest, RenderResponse renderResponse)
     throws PortletException, IOException
   {
     renderResponse.setContentType("text/html");
     getFormBean(renderRequest.getPortletSession());
     PortletURL renderUrl = renderResponse.createRenderURL();
     renderUrl.setWindowState(WindowState.MAXIMIZED);
     PortletRequestDispatcher dispatcher = getPortletContext().getRequestDispatcher(this.viewUrl);
     dispatcher.include(renderRequest, renderResponse);
   }

I set my attribute here in TestPortlet.java:

private void getFormBean(PortletSession session)
{
    String testVar = (String)session.getAttribute("testAttr", 1);
    if (null == testVar) {
        System.out.println("Setting Attribute inside Portlet");
        session.setAttribute("testAttr", "TESTING SESSION", 1);
    }
}

And retrieve the attribute here in TestServlet.java (same package):

private void handleRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
{
         String testVal = (String) request.getSession(true).getAttribute("testAttr");
         System.out.println("Test Attribute from Servlet:"+testVal);
}

The output of the application returns null

Setting Attribute in Portlet
Test Attribute from Servlet:null

Output should be:

Test Attribute from Servlet:TESTING SESSION

This application does work on my local setup, however not on a remote server with almost the same configurations. I've included the javax-servlet-api-3.1.0 in my tomcat/lib to retrieve the HttpServletRequest Class, haven't found what else could be missing. I also haven't seen any Exceptions/ClassNotFound Errors.

Could there be any kind of server configuration that could interfere with the Session? (Authentication, network config, security)

Local setup

  • Tomcat 7.0.33
  • jdk-1.7 (compiled with 1.6 and 1.7)

Remote setup

  • Tomcat 7.0.33
  • Apache Web Server
  • jdk-1.6.0u35
  • more jar files in /lib (jdbc drivers, etc)

If you want to share session data between portlet and servlet in the same application (war), you have to place the attribute in the application scope, like this:

portletSession.setAttribute("testAttr", "TESTING SESSION", PortletSession.APPLICATION_SCOPE); 

and then also retrieve it in portlet using scope:

portletSession.getAttribute("testAttr", PortletSession.APPLICATION_SCOPE);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM