Programování

Co je JSF? Představujeme JavaServer Faces

JavaServer Faces (JSF) je standardní technologie Java pro vytváření webových rozhraní založených na součástech a událostech. Stejně jako JavaServer Pages (JSP) umožňuje JSF přístup k datům a logice na straně serveru. Na rozdíl od JSP, což je v podstatě stránka HTML naplněná funkcemi na straně serveru, JSF je dokument XML, který představuje formální komponenty v logickém stromu. Komponenty JSF jsou podporovány objekty Java, které jsou nezávislé na HTML a mají celou škálu schopností Java, včetně přístupu ke vzdáleným API a databázím.

Klíčovou myšlenkou rámce jako JSF je zapouzdření (nebo zabalit) technologie na straně klienta, jako je HTML, CSS a JavaScript, které vývojářům umožňují vytvářet webová rozhraní bez velké interakce s těmito technologiemi.

Tento článek představuje snímek přístupu JSF k vývoji uživatelského rozhraní založeného na komponentách pro webové aplikace Java. Jednoduché příklady představují architekturu MVC JSF, model událostí a knihovnu komponent. Mezi příklady patří nové funkce v JSF 2.3 a pro naši knihovnu komponent použijeme PrimeFaces.

Vyvíjející se JSF

Dlouho populární společnost JSF nedávno čelila konkurenci webových rámců kompatibilních s Java, včetně rámců JavaScriptu na straně klienta. Přesto JavaServer Faces zůstává standardem Java, zejména pro rozsáhlý podnikový vývoj Java. Specifikace JSF také vytvořila nepřeberné množství rámců a knihoven, které držely krok s nedávnými vylepšeními na straně klienta. Jedním z nich je PrimeFaces, který prozkoumáme v tomto kurzu.

I když je plán budoucího vývoje nejasný, JSF 2.3 dává vývojářům spoustu práce, zatímco čekáme. Vydáno v březnu 2017, JSF 2.3 byl záměrně navržen tak, aby modernizoval JSF. Mezi několika stovkami drobných oprav a větších aktualizací JSF 2.3 odmítá spravované anotace typu bean ve prospěch CDI, které uvedu dále v tomto tutoriálu.

JSF 2.3 v Jakartě EE

V září 2017 společnost Oracle oznámila svůj záměr převést prostředí Java EE na nadaci Eclipse. Java EE byla od té doby přejmenována na Jakarta EE a pro pokračování byl přijat JSF 2.3 (Eclipse Mojarra). Dalším významným vydáním specifikace JSF bude Eclipse Mojarra 3.0.

Vytváření komponentních webových rozhraní v JSF

Základní myšlenkou JSF je zapouzdřit funkčnost do opakovaně použitelných komponent. Je to podobné jako opakovaně použitelné značky používané v JSP, ale komponenty JSF jsou formálnější.

I když můžete stránky JSF používat v rámci stránek JavaServer, je běžnější používat Facelety k vytváření samostatných stránek JSF. Čelenky jsou stránky XHTML určené k definování rozhraní JSF. U Faceletů pomocí značek XML vytvoříte strom komponent, který se stane scaffoldem pro uživatelské rozhraní JSF.

Výpis 1 představuje hlavní části jednoduché stránky JSF psané pomocí Facelets. V tomto příkladu přistupujeme k možnostem Java na straně serveru prostřednictvím fazole, která byla umístěna do rozsahu prostřednictvím CDI. Později uvidíte více informací o CDI.

Výpis 1. Ukázková stránka JSF

    Ahoj JavaWorld! # {javaBean.content} 

V seznamu 1 vidíme standardní stránku XHTML. Pohled Facelets je postaven na XHTML. Kromě oboru názvů XHTML je definován a odkazován sekundární obor názvů.

The h knihovna obsahuje standardní komponenty pro použití na stránkách JSF HTML. The //xmlns.jcp.org/jsf/html knihovna definuje kolekci komponent JSF, v tomto případě kolekci běžných prvků HTML. Jednou z těchto komponent je živel.

Komponenty HTML v JSF

Pokud jde o syntaxi, seznam 1 prvek odkazuje na jsf / html knihovna s h předpona. Poté odkazuje na konkrétní komponentu v knihovně, kterou je hlava součástka.

The komponenta vypíše prvek HTML head. (Celá ta syntaxe se může pro takový jednoduchý účel zdát přehnaná, ale je na to dobrý důvod, jak brzy uvidíte.)

Vnořené komponenty

Uvnitř hlavy je vnořený standardní HTML živel. Tento prvek je poskytován komponenta spolu s podřízenými prvky obsahu vnořenými uvnitř.

V těle dokumentu je výraz JSF obsažen v #{} syntax. To je přesně analogické výrazu JSP s ${} formát: umožňuje přístup k objektům Java v rozsahu a jednoduchým funkcím.

Základní vzor pro JSF je jednoduchý: Pomocí Faceletů vytvořte strom XML, který odkazuje na knihovnu komponent nebo knihovny, a pak použijte komponenty v knihovně k vykreslení objektů Java jako HTML.

Používání objektů Java v JSF

Vraťme se zpět do výpisu 1 a všimněte si, že uvnitř výrazu JSF ($ {javaBean.content) The javaBean objekt je v rozsahu, když je provedeno toto označení. XHTML Facelets přistupuje k .obsah majetek na javaBean objekt. Konečným výstupem je webové rozhraní, které sloučí strukturu zobrazení Facelets s datovými a logickými schopnostmi na straně serveru Java.

Použití výrazu JSF je jen jedním ze způsobů přístupu k datům aplikace Java z uživatelského rozhraní JSF. Nakonec budete chtít prozkoumat další způsoby, jak může komponenta JSF interagovat s back-endem Java - věci jako seznamy dat a mřížky a řada vstupních ovládacích prvků. Prozatím stačí absorbovat, jak JSF používá tagy XML (nebo anotace) k vytvoření stromu komponent, který vydává HTML na základě dat obsažených v objektech Java.

Anotace vs. XML

S JSF 2.3 se stalo možné definovat komponenty JSF s anotacemi a zcela se vyhnout XML metadatům. Je plně možné definovat a nasadit aplikaci JSF bez úpravy jakéhokoli XML.

Struktura aplikace JSF

Podobně jako stránky JavaServer i rozhraní Servlet API vyžaduje JavaServer Faces standardní adresářovou strukturu a metadata. Jsou nasazeny jako .válka soubory.

Struktura souboru .war je podobná aplikaci Servlet nebo JSP. Obsahuje a / webová aplikace adresář, ve kterém jsou uloženy značkovací soubory aplikace (v tomto případě HTML, JSP a Facelets) a také a / WEB-INF adresář, který představuje metadata k popisu aplikace.

Slouží JSF

I když můžete spustit JSF v kontejneru Java EE, jako je Glassfish, potřebujete opravdu jednoduchý kontejner servletu. Tomcat je oblíbený kontejner pro JSF a další technologie Java na straně serveru.

JSF 2.3: Specifikace a implementace

Jednou ze silných stránek Javy je, že je založena na standardech a tyto standardy jsou řízeny procesem komunity s otevřeným zdrojovým kódem. Od svého založení dohlížel na vývoj technologie Java proces JCA (Java Community Process). Jakmile je specifikace nebo vylepšení specifikace vyvinuta a schválena JCP, je k dispozici k implementaci více stranami. Až donedávna byly servlety, JSP a JSF vyvíjeny pomocí procesu specifikací otevřeného zdroje JCP.

Nejnovější specifikací JSF od tohoto psaní je JSF 2.3, která byla vydána jako součást Java EE 8 v roce 2017. Oracle (nyní Eclipse) Mojarra je referenční implementace JSF a MyFaces a PrimeFaces jsou populární implementace třetích stran.

Každý z těchto frameworků implementuje jádro JSF, které obsahuje některé standardní komponenty. Prodejci mohou kromě standardu nabídnout i další knihovny komponent. Při hodnocení rámců JSF je dobré zvážit potřeby vaší aplikace a jaké knihovny knihoven jsou k dispozici, aby vám ji pomohly sestavit. V ideálním případě by vás rámec JSF měl dostat co nejblíže k tomu, co potřebujete, hned po vybalení z krabice.

MVC v JSF 2.3

JSF je Rámec MVC, implementující vzor model-pohled-řadič. Ve vzoru MVC je myšlenkou oddělit tři problémy uživatelského rozhraní do diskrétních částí, takže je snadnější je spravovat. Obecně platí, že Pohled je zodpovědný za zobrazení dat v modelu a ovladač je zodpovědný za nastavení modelu a směrování uživatele do správného zobrazení.

V implementaci JSF je zobrazením stránka Facelets se sadou značek XML. Ty definují rozložení uživatelského rozhraní. Druhá polovina používání JSF je na straně serveru, kde třídy Java podporují tyto komponenty uživatelského rozhraní.

Managed beans zastaralé v JSF 2.3

Anotace spravovaných fazolí byly v JSF 2.3 zastaralé a nahrazeny CDI (kontexty a závislostní injekce). S CDI vývojáři definují kontext a vkládají objekty do tohoto kontextu. Ti, kteří znají spravované fazole, najdou syntaxi anotací mírně odlišnou, ale sémantika zůstává přesně stejná.

Kontrolní fazole

V JSF 2.3 poskytují fazole řadiče ovladač část rovnice MVC. Model poskytují normální objekty Java (často nazývané POJO nebo obyčejné staré objekty Java).

Pokud jde o tok procesu, fazole řadiče:

  1. Rozhodněte se, kam směrovat požadavky uživatelů
  2. Nastavte POJO pro model
  3. Pomocí modelu vykreslete pohled Facelets

JSF poté složí strom komponent a model, aby vykreslil výstupní HTML.

Výpis 2 ukazuje, jak byste definovali javaBean objekt ze seznamu 1 pomocí CDI. Tento seznam předpokládá, že aplikace má ve svých závislostech soubor cdi-api-1.2.jar.

Výpis 2. JavaBean definovaný pomocí CDI

 import javax.inject.Named; import javax.enterprise.context.SessionScoped; @Named @ViewScoped veřejná třída JavaBean implementuje Serializable {private String content = „Vítejte v JSF!“ // getters / setters} 

JSF 2.3 s PrimeFaces

V dalších částech vám pomocí PrimeFaces ukážeme, jak JSF implementuje vzor MVC, zasílání zpráv řízených událostmi a opakovaně použitelné komponenty. Chcete-li začít, otevřete vitrínu PrimeFaces a klikněte na Data odkaz v levém sloupci a vyberte DataList. Tím se vytáhne demo kód DataList pro PrimeFaces.

Obrázek 1 ukazuje, kde tyto vzorky najdete.

Matthew Tyson

Obrázek 2 ukazuje výstup jednoduché datové tabulky, která je převzata z demo ukázky PrimeFaces DataList.

Matthew Tyson

PrimeFaces DataList: Přístup k datovému modelu

Výpis 3 představuje označení pro toto dataList Zobrazit. Pokud se posunete do spodní části vitríny PrimeFaces, uvidíte značku v dataList.xhtml záložka.

Výpis 3. Facelet pro PrimeFaces DataList

   Základní # {car.brand}, # {car.year} 

V seznamu 3 si všimněte hodnota majetek dataList součástka. Vidíte, že toto odkazuje a dataListView objekt a přistupuje k .cars1 majetek na něm. Komponenta bude používat objekt modelu vrácený tímto polem. Tokeny JSF používají konvenční přístupové objekty k odkazování na vlastnosti objektu, takže .cars1 bude odkazovat na getCars () kariérista na objektu.

Dále si všimněte var = "auto" vlastnictví. To říká dataList komponenta, jakou proměnnou použít, když iteruje seznam aut vrácených hodnota pole. Tyto vlastnosti jsou specifické pro dataList komponenta, ale hodnota vlastnictví je velmi běžné. The var atribut je také běžný pro komponenty, které procházejí seznamy.

V těle komponenty v seznamu 3 můžete vidět auto proměnná je přístupná pomocí výrazů JSF jako #{značka auta}. Každá iterace dataListView.cars1 instance vypíše značka auta pole.

Všimněte si, že značka ukazuje schopnost přizpůsobit komponenty tak, jak se budou zobrazovat. V tomto případě je záhlaví definováno jako Základní.

Kombinací dat se značkami můžete vidět, jak bude tento výstup řídit Facelets XML. Nyní se podívejme na kód Java za tím.

Komponenty na straně serveru DataList

Výpis 4 ukazuje DataListView, třída Java, která je používána značkami v Seznamu 3. Brzy uvidíte, jak dataListView instance je spojena s DataListView třída.

Výpis 4. Třída DataListView

 balíček org.primefaces.showcase.view.data; import java.io.Serializable; import java.util.List; import javax.annotation.PostConstruct; import javax.inject.Named; // Pre JSF 2.3, this was: // import javax.faces.bean.ManagedBean; import javax.inject.Inject; import javax.faces.bean.ViewScoped; importovat org.primefaces.showcase.domain.Car; importovat org.primefaces.showcase.service.CarService; @Named @ViewScoped veřejná třída DataListView implementuje Serializable {private List cars1; soukromé auto selectedCar; @Inject ("# {carService}") soukromá služba CarService; @PostConstruct public void init () {cars1 = service.createCars (10); } public List getCars1 () {návrat vozů1; } public void setService (služba CarService) {this.service = služba; }} 

Výpis 4 má několik dalších důležitých prvků, které budeme zvažovat kousek po kousku.

Vkládání závislostí a anotace

Nejprve si všimněte, že DataListView třída je opatřena poznámkami @ Jmenováno, které můžete vidět z importu import javax.inject.Named; je součástí JSF. The @ Jmenováno anotace říká JSF, že tato fazole je součástí aplikace. The @ZobrazitSkoped anotace informuje JSF, že fazole bude žít jen po celý život pohledu.

Dále pozorujte, že Autoservis nemovitost má @Inject anotace (tzv @ManagedProperty před JSF 2.3). Toto je další funkce JSF, která umožňuje, aby fazole byly „propojeny dohromady“, což je technika popularizovaná Spring frameworkem a dalšími nástroji pro vkládání závislostí. V podstatě JSF najde autoservis objekt v rozsahu a automaticky jej přiřadit k servis pole na DataListView objekt.

$config[zx-auto] not found$config[zx-overlay] not found