Jeff Bischoff wrote:
I am looking for a JSF-based way to detect when a session is expiring
and run some code before it dies. Specifically, I am writing a
myfaces/tomahawk web application, and wish to save some user state
information to the database when the session expires. When they next log
in, they will have their previous state restored.
I have an ugly solution to this problem from my last Struts app, but I'm
looking for something cleaner. In Struts, when someone logged in, I
manually added a bean to the session with a specific attribute name
(e.g. "USER"). Then I registered a HttpSessionAttributeListener, and in
the attributeRemoved method I compared the name of the attribute being
removed to the bean's name. If they matched, then the bean was being
removed from the session, meaning this user was logging off.
It was normal in my Struts app to manually get and set request and
session attributes, but using JSF has obviated the need for such mess
and clutter... until now. So I would really like to keep things clean,
and find a better, JSF-oriented way. Any ideas?
Are JSF managed-beans guaranteed to have a certain name, when their
session attribute is removed? Maybe I could still do a comparison in the
listener, despite never explicitly adding anything to the session
directly...
The session attribute name of a JSF managed bean is exactly the
name you set in the faces config file. You don't need to
explicitly set and get them or manually remove them from the
session. You can just implement HttpSessionListener and catch
sessionDestroyed events. From the event you can get the session,
and from the session the attribute with the user data to be saved.
I don't think this is particularly ugly, and it is the standard
servlet-API way of doing it. It has the advantage that you can
still persist the user data even if the session simply expires
rather than only when the user clicks on something to logout.
J.
--
.....................................................................
Dr Jonathan Harley .
. Email: [EMAIL PROTECTED]
Zac Parkplatz Ltd . Office Telephone: 024 7633 1375
www.parkplatz.net . Mobile: 079 4116 0423