JavaServer Faces
Author
Albert FloresJavaServer Faces (zkratka JSF) technologie byla vyvinuta společností Sun Microsystems, Inc. Je součástí Java 5 Enterprise Edition. Hlavní myšlenkou je možnost čistějšího vývoje profesionálních Web aplikací. Vývojáři definují uživatelský interface pomocí speciálních XML tagů, kterým jsou předávána data k zobrazení / editaci ze standardních Java beanů. Takto je rozdělena Web aplikace čistě na uživatelské rozhraní (GUI) a aplikační logiku (business logic).
Úvod
Už název technologie napovídá, že tento framework se používá k oddělení definice uživatelského rozhraní (faces) od programování aplikační logiky v jazyce Java. Faces jsou soubory speciálních XML značek, kterým se specifikují odkazy na Java beans uložené v aplikačním serveru.
Uživatelské rozhraní
Při psaní těchto XML souborů se používají speciální XML značky, které se importují z tzv. Tag Library Description (TLD) souborů. +more Každý TLD soubor je součástí nějaké JavaServer Faces knihovny. Sun Microsystems specifikoval základní knihovnu tagů pro výpis textu, vstup textu, combo box, atd. pro základní použití. Implementaci této základní specifikace můžeme najít např. v aplikačním serveru od Sunu, nebo v rámci projektu [url=http://myfaces. apache. org]MyFaces[/url] od Apache Software Foundation, a jinde. Vzhledem k možnosti používání několika různých JSF knihoven je samozřejmostí vyřešení konfliktů v názvech tagů. Většina knihoven se nedrží pouze specifikace od Sunu, ale přidává mnohá rozšíření. K odlišení tagů se stejným jménem se požívá prefix tagu, kterým si programátor pojmenoval importovanou knihovnu:.
Tento příklad by vygeneroval klasický „Hello world. “ příklad, tj. +more HTML GUI, kde je pouze uvedený text. Jako hodnoty pro atribut value se samozřejmě nepoužívají statická data, ale odkazy na dynamicky generovaná data z Java beanů.
Tento příklad už pracuje sofistikovaněji. JSF framework si vyhledá backing bean se jménem Slovnik a získá hodnotu standardním Java Bean mechanizmem: Slovnik.getPozdrav.
Aplikační logika
Aplikační logika spočívá v konfiguraci Webové aplikace a implementaci backing beanů (standardní Java Beans). Na této úrovni již programátora vůbec nezajímá kdo a jakým způsobem zobrazí informace uživateli, nebo jakým způsobem je od uživatele získá. +more O toto se stará vrstva uživatelského rozhraní (vizte výše). Konfigurace JSF je poměrně jednoduchá - stačí vytvořit soubor faces-config. xml v rámci adresáře WEB-INF Vaší Webové aplikace. Zde nakonfigurujete mapování Vašich backing beanů na jména, která budete používat v odkazech na data v definicích GUI, atd.
Příklad faces-config.xml
cs_CZ cs_CZ en_US
Váš první backing bean PrvniBean cele.jmeno.tridy.PrvniBean session
Beany běží na serveru, nikoliv u uživatele. Uživatel tedy nemusí mít vůbec nainstalované Java Runtime Environment. Jediné, co musí mít, je HTML prohlížeč.
Další základní a důležitou funkčností JSF je systém navigace - přechodu z jednoho pohledu na druhý. Tu lze, kromě obvyklých pevných odkazů na další pohled, definovat navigačními pravidly (Navigation Rules). +more V definici GUI jsou uvedeny, místo odkazů na JSF soubory, akce. Výstup těchto akcí (textový klíč) je potom použit k rozpoznání, na jaký pohled přejít. Opět lze specifikovat specifikovat pevný, statický klíč nebo metodu na backing beanu, která vrací java. lang. String, tedy dynamický klíč v závislosti na provedené akci.
Definice pravidel ve faces-config.xml
vystupAkceA /web/viewA.jsp
vystupAkceB /web/viewB.jsp
Statický příklad
V tomto příkladě dojde k přesunu vždy na /web/viewA.jsp.
Dynamické rozhodování
public class MujBean { public String sportkaAction { if(mamStesti) return "vystupAkceB"; else return "vystupAkceA"; } }
V tomto případě JSF nejdříve zavolá metodu MujBean.sportkaAction a podle toho, jaký klíč tato metoda vrátí se rozhodne, jaká stránka bude zobrazena jako další.
JSF komponenty
Každý JSF tag má interně v rámci dané knihovny přiřazeno několik Java tříd. Soubor těchto tříd se nazývá komponenta. +more Tato skupina obsahuje Tag - která zpracuje nový napsaný tag a atributy předá Java reprezentaci tagu. Tato reprezentace obstarává aplikační logiku tagu (jako konverzi hodnot na text, volání action metod, validaci a přípravu pro „vykreslení“ informace). O vykreslování se postará třetí třída Renderer. Ta zapíše do výstupu vlastní HTML kód a data z reprezentace tagu.
Cyklus JSF
Celý proces od dotazu uživatelova prohlížeče k přijetí odpovědi (GUI) od serveru, resp. naší aplikace, probíhá v několika fázích:
* HTTP Request je předán Faces Servletu, který spustí vlastní JSF Lifecycle * RESTORE VIEW fáze obnoví předchozí stav aplikace pro danou session, tj. znovu vytvoří strukturu reprezentující zobrazený pohled. +more Pokud požadovaný pohled není v session nalezen (např. při prvním zobrazení pohledu), přechází se rovnou na fázi render response, protože nemá smysl projít následujícími čtyřmi kroky. * APPLY REQUEST VALUES fáze. Vzhledem k tomu, že Webová aplikace je interaktivní, zasílá se na server formulář, který uživatel (třeba i nevědomky) vyplnil. I action metody jsou volány na základě skrytých vstupů, které se nastavují pomocí JavaScriptu v uživatelově prohlížeči při kliknutí. V této fázi Renderer dekóduje relevantní položky z HTTP Request a nastaví komponentu podle uživatelova zásahu. * PROCESS VALIDATIONS fáze spustí registrované validátory na vstupní data. Při selhání validace se zaregistrují chybová hlášení pro jednotlivé komponenty a současný pohled se vyrenderuje znovu, tedy i s chybovými zprávami. (Tudíž následující dva kroky se přeskočí. ) * UPDATE MODEL VALUES se spustí po úspěšné validaci vstupů. Tato fáze nastaví hodnoty na Java beanech - až teď se dostávají vstupní data do aplikace. Nastavení se děje zase standardním Java Bean mechanizmem, voláním příslušných setterů. * INVOKE APPLICATION spustí požadované action metody a na základě výstupních klíčů se rozhodne o další navigaci na jiný pohled, nebo se přistoupí k přerenderování současného pohledu s novými daty. * RENDER RESPONSE zapíše do výstupního proudu HTTP Response vlastní HTML s daty z reprezentace tagu. * HTTP Response se zobrazí v prohlížeči uživatele.
Externí odkazy
[url=http://java. sun. +morecom/javaee]Java Enterprise Edition[/url] * [url=http://www. jboss. org]Aplikační server JBoss[/url] * [url=https://web. archive. org/web/20100710004503/http://tomcat. apache. org/]Apache Tomcat[/url] * [url=http://java. sun. com/javaee/5/docs/tutorial/doc]Sun Java 5 EE Tutorial[/url].