簡體   English   中英

Portlet會話中設置的屬性在Servlet會話中不可用

[英]Attribute set in portlet session is not available in servlet session

在Liferay論壇上發貼: https : //www.liferay.com/community/forums/-//message_boards/message/47412302

我在JSR-286 Portlet中有一個簡單的應用程序設置,以從Portlet session.attribute檢索值。

doView()方法:

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);
   }

我在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);
    }
}

並在TestServlet.java(相同的包)中檢索屬性:

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);
}

應用程序的輸出返回null

Setting Attribute in Portlet
Test Attribute from Servlet:null

輸出應為:

Test Attribute from Servlet:TESTING SESSION

該應用程序可以在我的本地設置上運行,但是不能在配置幾乎相同的遠程服務器上運行。 我已經在tomcat / lib中包含了javax-servlet-api-3.1.0來檢索HttpServletRequest類,但還沒有發現其他可能缺少的東西。 我也沒有看到任何Exception / ClassNotFound錯誤。

是否有任何類型的服務器配置可能會干擾會話? (身份驗證,網絡配置,安全性)

本地設置

  • 的Tomcat 7.0.33
  • jdk-1.7(與1.6和1.7編譯)

遠端設定

  • 的Tomcat 7.0.33
  • Apache Web服務器
  • JDK-1.6.0u35
  • / lib中有更多jar文件(jdbc驅動程序等)

如果要在同一應用程序中的portlet和servlet之間共享會話數據(戰爭),則必須將屬性放在應用程序范圍內,如下所示:

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

然后還使用范圍在portlet中檢索它:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM