We are using Liferay Portal 6.0, and the portlets are Primefaces 3.4, JSF 2.1, We support having more than one browser tab opened for the same user, and each tab can have up to 15 portlets at a time, each portlet is displaying a JSF page (ViewScopedBean
) using iframe
.
The problem is that the opened JSF pages (inside a iframe
inside a portlet) don't know when their portlets get closed or when the whole browser tab gets closed, So they stay in memory until session times out. And this is causing a major problem in server memory leading to complete failure.
My questions are: How can I have the list of opened pages (views) from server side? and how can I also close them? I know that a ViewScopedBean
gets destroyed when it is redirected to another page (a dummy page as a workaround), so can I redirect each page from the list (If I can have it!) from server side?
Thank you very much in advance.
You can capture a closing tab, with HTML DOM events like beforeunload.
You can list them in an application scoped bean. i.e : Add a view to a list when the view has been called and initiated, and remove it from the list on tab unload/closure ? From that list you can do lot of checkings.. and even close a session if there are no more views associated with it.