Session scoped bean is created on first HttpRequest
involving this bean. Destroyed when session
is invalidated. You can also destroy it manually by removing it from the HttpSession
, or sessionMap
(get through FacesContext
).
The fact is that it's illogical to create Session scoped bean which will live only during the tab view. For this exact purpose defining Custom scoped bean will be better, but think about it first:
- Why do you need such functionality ? Because of memory ?
Well it could be pretty tricky, imagine user just switching between the tabs pretty often and you are recreating the bean over and over. Even worse what if you fetch data from DB in constructor
or @PostConstruct
. It won't be really efficient.
My opinion is that you should forget about it (unless you need it for some other purposes) and pick a View scoped bean. This bean gets initialized after accessing the view and lives till you don't switch to another view - so no DB fetching on each tab switch (still same view). IMO it's better to fetch huge data once than eg. 15 times... If you don't fetch any data, then go definitely for View scoped. But that's just my opinion as I said.
If you can't afford View scoped, go for Custom scoped bean, but definitely not Session scoped.
Further reading for you : BalusC on JSF 2.0
Hope it helped !