Chce aby przed zamknięciem sesji otworzyła się domyslan strona aplikacji (logowania). W tym celu stworzylem SessionListene i w metodzie @PreDestroy chce wywołać: FacesContext.getCurrentInstance().getExternalContext().invalidateSession(); niestety wala mi bląd: rg.apache.catalina.session.StandardSession.expire(StandardSession.java:910)
jak mogę rozwiązać ten problem w inny sposób?
A czemu ta linia ma służyć? Co się stanie jak ją usuniesz?
Nie wiem czy da się to sensownie zrobić. Możesz zastosować trochę inną sztuczkę, i żeby sesja nie wygasała- okresowo (np. używając primefaces/poll) wywoływać jakąś pustą metodę po stronie serwera. Taki komponent możesz wstawić do głównego szablonu strony. Jest to mało eleganckie ale działa ;)
Druga metoda polega na tym, żeby aplikacja przekierowała użytkownika na stronę panelu logowania razie wystąpienia wyjątku ViewExpiredException, tak jak tutaj:
https://stackoverflow.com/questions/20863925/jsfviewexpiredexception-handling-from-web-xml-is-not-working
to zadziała gdy użytkownik zrobi "normalne" zapytanie (zatwierdzenie formularza), ale nie gdy zrobi zapytanie AJAXem. Wtedy możesz spróbować załatwić to tak jak tutaj:
https://stackoverflow.com/questions/11203195/session-timeout-and-viewexpiredexception-handling-on-jsf-primefaces-ajax-request
invalidateSession() raczej nie ma sensu bo przecież i tak sesja gaśnie.
Super, dzięki