2013-12-17 2 views
1

우리는 Liferay Portal 6.0을 사용하고 있습니다. 포틀릿은 Primefaces 3.4, JSF 2.1입니다. 우리는 동일한 사용자 용으로 열리는 브라우저 탭을 두 개 이상 지원하며 각 탭은 한 번에 최대 15 개의 포틀릿을 가질 수 있으며 각 포틀릿은 iframe을 사용하는 JSF 페이지 (ViewScopedBean).열려있는 모든 JSF 페이지를 얻고 서버 측에서 닫거나 리디렉션하는 방법은 무엇입니까?

열린 JSF 페이지 (포틀릿 내부의 iframe 내부)는 포틀릿이 닫히거나 전체 브라우저 탭이 닫힐 때를 알지 못하므로 세션 시간이 초과 될 때까지 메모리에 남아 있습니다. 그리고 이로 인해 서버 메모리에 심각한 문제가 발생하여 오류가 발생합니다.

제 질문은 다음과 같습니다. 서버 쪽에서 열린 페이지 (보기) 목록을 어떻게 표시합니까? 어떻게 그들을 닫을 수 있습니까? 나는 ViewScopedBean이 다른 페이지 (회피책으로 더미 페이지)로 리디렉션 될 때 파괴된다는 것을 알고 있으므로 목록에서 각 페이지를 리디렉션 할 수 있습니까?

대단히 감사합니다.

+0

추상화를 보지 않고 네트워크 프로토콜을 살펴보십시오. 서버는 클라이언트가 수행중인 작업을 어떻게 알 수 있습니까? JSF/서블릿/포틀릿은 HTTP를 기반으로합니다. – McDowell

+0

클라이언트 쪽 Javascript로 페이지를 리디렉션하면 브라우저 탭이나 창을 닫을 때 성가신 확인/취소 대화 상자가 나타납니다. 그래서 서버 측 솔루션을 생각하고 있습니다. –

+0

@McDowell 당신은 정확히 무엇을 제안하고 있습니까? –

답변

2

는 전체 브라우저 탭이

폐쇄됩니다 때 beforeunload 같은 HTML DOM 이벤트와, 닫는 탭을 캡처 할 수 있습니다.

내 질문은 : 서버 쪽의 열린 페이지 (보기) 목록을 어떻게 가질 수 있습니까?

응용 프로그램 범위 bean에 나열 할 수 있습니다. 즉 :보기가 호출되고 시작될 때 목록에보기를 추가하고 탭 언로드/종료시 목록에서보기를 제거 하시겠습니까? 이 목록에서 검사를 많이 할 수 있으며 더 이상 관련 뷰가없는 경우 세션을 닫을 수도 있습니다.

+0

을 사용하고 있기 때문에 Javascript를 사용하면 탭 또는 브라우저를 닫을 때 성가신 대화 상자가 표시되므로 서버 쪽을 향하게됩니다. 두 번째 제안은 정말 흥미 롭습니다. 시도해 보겠습니다. 고맙습니다. –

+1

_ "Javascript를 사용하면 탭이나 브라우저를 닫을 때 귀찮은 대화 상자가 나타납니다."_ 반드시 그런 것은 아니지만 대화 상자를 표시하지 않고 자동으로 닫을 수 있습니다. 'h : body' 태그 내부를 검사하면 탭 클로저 이벤트를 캡쳐 할 수있는'onunload'라는 속성이 있습니다. 뷰를 수집하려면 JSF 전문가 BalusC가 제안한 것과 같이 다음과 같이 할 수 있습니다. http://stackoverflow.com/questions/11211387/how-to-get-all-the-session-scoped-beans-in- jsf-2. 희망이 도움이 되었습니까? –

+0

매우 흥미로운 아이디어 ..이 자바 메서드를 시도하고 view onunload를 제거 할 수 있는지 확인합니다. –