2015-01-06 6 views
1

포스트에서 사용할 수 없습니다 :속성을 Liferay 포럼에 서블릿 세션

https://www.liferay.com/community/forums/-/message_boards/message/47412302가 나는 Portletsession.attribute

하는 doView의 값을 (검색하는 JSR-286 포틀릿에서 간단한 응용 프로그램의 설정을 가지고) 방법 :

,536,913,632 :

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 여기에 내 속성을 설정 10

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

응용 프로그램 반환의 출력은

Setting Attribute in Portlet 
Test Attribute from Servlet:null 

출력해야한다 null로 :

Test Attribute from Servlet:TESTING SESSION 

이 응용 프로그램은 작동하지 않습니다 내 로컬 설치에 있지만 거의 동일한 구성을 가진 원격 서버에 없습니다. 클래스를 검색하기 위해 tomcat/lib에 javax-servlet-api-3.1.0을 포함 시켰습니다. 누락 된 것이 무엇인지 발견하지 못했습니다. 나는 또한 어떤 Exceptions/ClassNotFound 오류도 보지 못했다.

세션을 방해 할 수있는 모든 종류의 서버 구성이있을 수 있습니까? (인증, 네트워크 설정, 보안)

지역 설정

  • 톰캣 7.0.33
  • JDK-1.7 (1.6 및 1.7 컴파일)

원격 설치

  • Tomcat 7.0.33
  • Apache 웹 서버
  • JDK-1.6.0u35
  • 더 jar 파일에서/lib 디렉토리 (JDBC 드라이버 등)
+0

은 무엇입니까 PortletSession Scope로 테스트 할 때의 결과? String testVar = (String) session.getAttribute ("testAttr", 2); – erhun

+0

자체 선언 내에서 세션 속성 값을 검색하는 테스트를 요청합니까? confused –

+0

죄송합니다. 첫 번째 부분을 잘못 이해합니다. TestPortler.java에서 session으로 설정합니다.setAttribute ("testAttr", "세션 테스트", 1); session.setAttribute ("testAttr", "TESTING SESSION", 2)로 시도 했습니까? – erhun

답변

1

같은 응용 프로그램 (전쟁), 당신이에서 포틀릿과 서블릿 사이의 세션 데이터를 공유하려면

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

을하고도 범위를 사용하여 포틀릿에서 검색 : 같은 응용 프로그램의 범위에 속성을 배치

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

감사합니다. 가스는 처음에 정의 된대로 로컬 설정에서 작동합니다. 그러나 원격 개발 서버에서 여전히 null을 반환합니다. 원격 서버가되는 두 가지 주요 차이점은/lib 폴더에 더 많은 라이브러리가 있고 http 서버와 작동하도록 구성되어 있습니다. –

+0

설명에 더 많은 정보가 포함되어 있습니다 –

+1

@ClayBanks 어쩌면 아파치 <-> Tomcat 설정에 문제가 있습니다. 세션이 전혀 작동하지 않는다면 간단한 서블릿/JSP를 사용하여 테스트하거나 HTTP 서버를 거치지 않고 원격 서버를 호출 해보십시오. – Gas