Kapitola 7. Životní cyklus JSF aplikace

Obsah

7.1. Fáze Restore View
7.2. Fáze Apply Request Values
7.3. Fáze Process Validations
7.4. Fáze Update Model Values
7.5. Fáze Invoke Application
7.6. Fáze Render Response
7.7. Události v životním cyklu aplikace
7.7.1. Ovlivňování životního cyklu pomocí atributu immediate
7.8. Příklad k procvičení

Nyní si pro lepší pochopení všech probraných oblastí popíšeme, co se děje na pozadí JSF frameworku a jak je postupně uživatelský požadavek zpracováván. Vrátíme se také k událostem, které s životním cyklem dosti souvisí.

JSF pracuje stejně jako např. HTML protokol na principu request-response. Aby však bylo schopno zajistit veškerou svou pokročilejší funkcionalitu, jako např. konverzi, validaci a zpracování událostí, je celý cyklus obsluhy požadavku rozdělen do šesti fází, kterými se mezi vznikem požadavku a zasláním odpovědi prochází. Jejich názvy můžete vidět na obrázku 7.1 a jsou také vysvětleny dále v této kapitole.

Při zpracování cyklu hraje důležitou roli instance třídy FacesContext, která je vytvořena na začátku každého životního cyklu voláním metody getFacesContext() třídy FacesContextFactory (pro více informací o těchto třídách viz [6]). Tato instance udržuje všechny potřebné informace vztahující se k aktuálnímu requestu.

V JSF se rozlišují dva druhy požadavků:

Initial Request

Jedná se o prvotní požadavek na stránku, která nebyla předtím načtena. Mohlo na ni být odkázáno z externího zdroje, např. z jiného webu. Při tomto typu požadavku se neprochází všemi šesti fázemi životního cyklu, nýbrž pouze dvěma - z první fáze Restore View se přechází přímo k poslední fázi Render Response.

Životní cyklus JSF aplikace v případě Initial Requestu (zdroj: vlastní; inspirován )

Obrázek 7.1. Životní cyklus JSF aplikace v případě Initial Requestu (zdroj: vlastní; inspirován [8])


Při Initial Requestu je v Restore View fázi vytvořeno nové prázdné view. To je následně uloženo v instanci FacesContext, jenž zavolá svou metodu renderResponse(). Tím se přeskočí všechny ostatní fáze a na základě komponent, které jsou umístěny na stránce, se postupně renderuje odpověď a zároveň s tím se komponentami postupně plní nově vytvořené view, aby bylo připraveno pro další request.

Postback Request

Na rozdíl od Initial Requestu požaduje stránku, která byla již jednou načtena, např. při potvrzení formuláře na stránce.[33] Při tomto typu požadavku se prochází všemi šesti fázemi životního cyklu, samozřejmě za předpokladu, že v žádné fázi nebude cyklus nějakým způsobem přerušen.

Životní cyklus JSF aplikace v případě Postback Requestu (zdroj: )

Obrázek 7.2. Životní cyklus JSF aplikace v případě Postback Requestu (zdroj: [8])


Jak vidíte na obrázku 7.2, životní cyklus nemusí vždy proběhnout celý. V průběhu každé fáze, mimo první a poslední, mohou vzniknout události, které jsou po skončení fáze zaslány svým listenerům a zpracovány (modré obdélníky na obrázku). Při tomto zpracování mohou být volány některé metody třídy FacesContext, které způsobí přerušení, či zkrácení cyklu (šipky s popiskem, které vedou z modrých obdélníků). Konkrétně se jedná o metody responseComplete() a renderResponse(). Těmito situacemi se budeme zabývat na konci kapitoly v sekci 7.7 – „Události v životním cyklu aplikace“. Nyní si popíšeme průběh všemi fázemi a co se během nich děje. Během procházení následujících šesti sekcí spolupracujte také s obrázkem 7.2.

7.1. Fáze Restore View

Toto je první fáze životního cyklu, která nastává ihned po vzniku requestu. Během ní se zpracovává view požadované stránky (pro připomenutí jak vypadá view se můžete podívat na obrázek 3.4). Při postback requestu již view existuje a informace o něm jsou uloženy buď na serveru nebo na klientovi.[34] Stačí ho tedy pouze načíst. Následně je toto view uloženo ve FacesContextu.

Jak již bylo řečeno, pokud se jedná o Initial Request, vytvoří se nové prázdné view a hned nato se skočí na fázi Render Response, během které se view naplní komponentami.



[33] Způsob zpracování formuláře jsem nastínil již v sekci 4.3.2 – „Formuláře“, kde jsem zmínil, že veškeré formuláře v JSF směřují vždy na tu samou stránku, ze které byly vyvolány. O tom, která stránka se má načíst jako následující, se rozhoduje až v pozdější fázi cyklu, konkrétně ve fázi Invoke Application.

[34] O tom, zda jsou informace uloženy na serveru nebo na klientovi rozhoduje konfigurace v souboru deployment descriptoru web.xml. Stačí do něj přidat kontextový parametr s názvem javax.faces.STATE_SAVING_METHOD a jako hodnotu zadat client respektive server. Pro více informací o možnostech deployment descriptoru viz [8].

Creative Commons License
Uvedená práce (dílo), jejímž autorem je Bc. David Hanel, podléhá licenci Creative Commons Uveďte autora-Neužívejte dílo komerčně-Zachovejte licenci 3.0 Česko.