JSF2: Managed Bean scopes – Czas życia Zarządzanych Ziaren

JSF bardzo ułatwia tworzenie aplikacji internetowych w wygodny i szybki sposób. Aby móc w pełni wykorzystać dobrodziejstwa płynące z JSF, trzeba jednak znać czas życia Ziarna, aby uniknąć zbytniego obciążenia serwera przez niepotrzebne wywołania oraz aby uniknąć rozczarowania poprzez NULL zamiast referencji do któregoś z nieserializowanych obiektów.

Nazwa Moment utworzenia Moment uśmiercenia Uwagi
RequestScoped Rozpoczęcie obsługi danego żądania HTTP. Zakończenie obsługi danego żądania HTTP. Nadaje się do obsługi prostych żądań, takich jak zwykłe formularze.
ViewScoped Pierwsze odwołanie do Bean po jego uśmierceniu lub gdy wcześniej nie było jeszcze żadnego odwołania. Przejście do innej podstrony WWW. Nadaje się zarówno dla wywołań AJAX i non-AJAX, gdy użytkownik dłużej pozostaje na danej podstronie WWW i tam dokonuje jakiś operacji.
SessionScoped Pierwsze odwołanie do Bean po jego uśmierceniu lub gdy wcześniej nie było jeszcze żadnego odwołania. Zakończenie sesji. Nadaję się trzymania np. dany o zalogowanym użytkowniku.
ApplicationScoped Pierwsze odwołanie do Bean. Bean żyje cały czas (do wyłączenia serwera). Nadaje się do takich zastosowań, jak ustawienia aplikacji odczytywane z bazy danych lub inne dla innych danych odczytywanych z bazy danych, które są w miarę statyczne.
NoneScoped Wywołanie pojedynczego wyrażenia. Zakończenie przetwarzania pojedynczego wyrażenia. Przykładowo: Dla 3-ch wyrażeń #{bean.jakis_pole} Bean będzie tworzony 3 razy.
CustomScoped Ręczne utworzenie Bean. Ręczne usunięcie Bean z Mapy. Do wszystkich innych zastosowań niż powyższe.

W poprzednich wersjach JSF, czas życia Ziaren określało się w odrębnym pliku XML o nazwie: faces-config.xml.

<managed-bean>
    <managed-bean-name>myBean<managed-bean-name>
    <managed-bean-class>com.protechnologia.MyBean</managed-bean-class>
    <managed-bean-scope>view</managed-bean-scope>
</managed-bean>

W najnowszych wersjach JSF, możliwe jest stosowanie adnotacji zamiast w/w pliku XML.

@ManagedBean
@ViewScoped
public class MyBean {
 
    private String position;
 
    public String getPosition() {
        return position;
    }
 
    public void setPosition( String position ) {
        this.position = position;
    }
 
}