Programovanie

Čo je to JSF? Predstavujeme JavaServer Faces

JavaServer Faces (JSF) je štandardná technológia Java na vytváranie webových rozhraní orientovaných na jednotlivé udalosti a orientovaných na udalosti. Rovnako ako stránky JavaServer (JSP) umožňuje JSF prístup k údajom a logike na strane servera. Na rozdiel od JSP, čo je v podstate stránka HTML naplnená funkciami na strane servera, JSF je dokument XML, ktorý predstavuje formálne komponenty v logickom strome. Komponenty JSF sú chránené objektmi Java, ktoré sú nezávislé od HTML a majú celú škálu schopností Java vrátane prístupu k vzdialeným API a databázam.

Kľúčovou myšlienkou rámca ako JSF je zapuzdrenie (alebo obal) technológie na strane klienta, ako sú HTML, CSS a JavaScript, ktoré vývojárom umožňujú vytvárať webové rozhrania bez väčšej interakcie s týmito technológiami.

Tento článok predstavuje prehľad prístupu JSF k vývoju UI založeného na komponentoch pre webové aplikácie Java. Jednoduché príklady predstavujú architektúru MVC JSF, model udalostí a knižnicu komponentov JSF. Príklady zahŕňajú nové funkcie v JSF 2.3 a pre našu knižnicu komponentov použijeme PrimeFaces.

Rozvíjajúci sa JSF

Spoločnosť JSF, ktorá je už dlho populárna, nedávno čelila konkurencii webových rámcov kompatibilných s Java, vrátane rámcov JavaScriptu na strane klienta. Napriek tomu zostáva JavaServer Faces štandardom Java, najmä pre rozsiahly podnikový vývoj Java. Špecifikácia JSF tiež priniesla množstvo rámcov a knižníc, ktoré držali krok s nedávnymi vylepšeniami na strane klienta. Jedným z nich je PrimeFaces, ktorému sa venujeme v tomto návode.

Aj keď harmonogram budúceho vývoja nie je jasný, JSF 2.3 dáva vývojárom dostatok práce s čakaním. Spoločnosť JSF 2.3, ktorá bola vydaná v marci 2017, bola zámerne navrhnutá s cieľom modernizovať JSF. Spomedzi niekoľkých stoviek malých opráv a väčších aktualizácií JSF 2.3 odmieta spravované fazuľové anotácie v prospech CDI, ktoré uvediem ďalej v tomto návode.

JSF 2.3 v Jakarte EE

V septembri 2017 spoločnosť Oracle oznámila zámer previesť prostredie Java EE na nadáciu Eclipse Foundation. Java EE sa odvtedy premenovala na Jakarta EE a pre pokračovanie bol prijatý JSF 2.3 (Eclipse Mojarra). Ďalším hlavným vydaním špecifikácie JSF bude Eclipse Mojarra 3.0.

Budovanie webových rozhraní založených na komponentoch v JSF

Základnou myšlienkou spoločnosti JSF je zapuzdriť funkčnosť do opakovane použiteľných komponentov. Je to podobné ako opakovane použiteľné značky používané v JSP, ale komponenty JSF sú formálnejšie.

Aj keď môžete stránky JSF používať v rámci stránok JavaServer Pages, na vytváranie samostatných stránok JSF je bežnejšie používať Facelety. Facelety sú stránky XHTML určené na definovanie rozhraní JSF. V prípade Faceletov používate značky XML na vytvorenie stromu komponentov, ktorý sa stane lešením pre používateľské rozhranie JSF.

Zoznam 1 predstavuje hlavné časti jednoduchej stránky JSF napísanej pomocou Faceletov. V tomto príklade pristupujeme k schopnostiam Java na strane servera prostredníctvom fazule, ktorá bola umiestnená do rozsahu prostredníctvom CDI. Neskôr sa dozviete viac o CDI.

Výpis 1. Ukážková stránka JSF

    Ahoj JavaWorld! # {javaBean.content} 

V zozname 1 vidíme štandardnú stránku XHTML. Zobrazenie Facelets je postavené na XHTML. Okrem menného priestoru XHTML je definovaný a odkazovaný aj sekundárny menný priestor.

The h Knižnica obsahuje štandardné komponenty pre použitie na stránkach JSF HTML. The //xmlns.jcp.org/jsf/html Knižnica definuje kolekciu komponentov JSF, v tomto prípade kolekciu bežných prvkov HTML. Jednou z týchto zložiek je element.

Komponenty HTML v JSF

Pokiaľ ide o syntax, zoznam 1 odkaz na prvok jsf / html knižnica s h predpona. Potom odkazuje na konkrétny komponent v knižnici, ktorým je hlava zložka.

The komponent vydáva element HTML head. (Celá táto syntax sa môže zdať pre taký jednoduchý účel ako prehnaná, ale ako uvidíte neskôr, má to dobrý dôvod.)

Hniezdne komponenty

Vo vnútri hlavy je vnorený štandardný HTML element. Tento prvok je poskytovaný spolu s podradenými prvkami obsahu vnorenými do nej.

V tele dokumentu je výraz JSF obsiahnutý v #{} syntax. Toto je presne obdoba výrazu JSP s ${} formát: umožňuje prístup k objektom Java v rozsahu a k jednoduchým funkciám.

Základný vzor pre JSF je jednoduchý: Pomocou Faceletov vytvorte strom XML, ktorý odkazuje na knižnicu alebo knižnice komponentov, a potom pomocou komponentov v knižnici vykreslite objekty Java ako HTML.

Používanie objektov Java v JSF

Vráťme sa späť do zoznamu 1 a všimnite si, že vo vnútri výrazu JSF ($ {javaBean.content) The javaBean objekt je v rozsahu, keď sa vykoná toto označenie. XHTML Facelets pristupuje k .obsah majetok na javaBean objekt. Konečným výstupom je webové rozhranie, ktoré spája štruktúru zobrazenia Facelets s údajmi a logickými schopnosťami na strane servera Java.

Použitie výrazu JSF je iba jedným zo spôsobov prístupu k údajom aplikácií Java z používateľského rozhrania JSF. Nakoniec budete chcieť preskúmať ďalšie spôsoby, ako môže komponent JSF interagovať s backendom Java - napríklad zoznamy údajov a mriežky a rôzne vstupné ovládacie prvky. Nateraz stačí absorbovať, ako JSF používa značky XML (alebo anotácie) na vytvorenie stromu komponentov, z ktorých vychádza HTML na základe údajov obsiahnutých v objektoch Java.

Anotácie vs XML

S JSF 2.3 je možné definovať komponenty JSF s anotáciami, čím sa úplne vyhýba XML metadátam. Je úplne možné definovať a nasadiť aplikáciu JSF bez úpravy akýchkoľvek XML.

Štruktúra aplikácie JSF

Rovnako ako JavaServer Pages a Servlet API, aj JavaServer Faces vyžaduje štandardnú adresárovú štruktúru a metadáta. Tieto sú nasadené ako .vojna súbory.

Štruktúra súboru .war je podobná aplikácii Servlet alebo JSP. Obsahuje a / webová aplikácia adresár, ktorý obsahuje značkové súbory aplikácie (v tomto prípade HTML, JSP a Facelets), ako aj a / WEB-INF adresár, ktorý predstavuje metadáta na popis aplikácie.

Slúži JSF

Aj keď môžete spúšťať JSF v kontajneri Java EE, ako je Glassfish, naozaj potrebujete jednoduchý kontajner servletu. Tomcat je populárny kontajner pre JSF a ďalšie technológie Java na strane servera.

JSF 2.3: Špecifikácie a implementácie

Jednou zo silných stránok Javy je, že je založená na štandardoch a tieto štandardy sa riadia procesom otvorenej komunity. Od svojho vzniku dohliadal na vývoj technológie Java proces Java Community Process (JCP). Len čo je špecifikácia alebo vylepšenie špecifikácie vyvinuté a schválené JCP, je k dispozícii na implementáciu viacerými stranami. Donedávna boli servlety, JSP a JSF vyvíjané pomocou procesu špecifikácie otvoreného zdroja JCP.

Najnovšia špecifikácia JSF od tohto písania je JSF 2.3, ktorá bola vydaná ako súčasť Java EE 8 v roku 2017. Oracle (teraz Eclipse) Mojarra je referenčná implementácia JSF a MyFaces a PrimeFaces sú populárne implementácie tretích strán.

Každý z týchto rámcov implementuje jadro JSF, ktoré obsahuje niektoré štandardné komponenty. Predajcovia môžu okrem štandardu ponúkať aj ďalšie knižnice komponentov. Pri hodnotení rámcov JSF je dobré vziať do úvahy potreby vašej aplikácie a to, aké knižnice komponentov sú k dispozícii, aby ste ju mohli ľahšie vytvoriť. V ideálnom prípade by vás rámec JSF mal ihneď po vybalení dostať čo najbližšie k tomu, čo potrebujete.

MVC v JSF 2.3

JSF je Rámec MVC, implementujúca vzor model-pohľad-radič. Cieľom vzoru MVC je rozdeliť tri záujmy používateľského rozhrania na diskrétne časti, aby sa dali ľahšie spravovať. Všeobecne platí, že vyhliadka je zodpovedný za zobrazovanie údajov v modeli a kontrolór je zodpovedný za nastavenie modelu a smerovanie používateľa do správneho pohľadu.

V implementácii JSF je zobrazením stránka Facelets so sadou značiek XML. Tieto definujú rozloženie používateľského rozhrania. Druhá polovica použitia JSF je na strane servera, kde triedy Java tieto komponenty používateľského rozhrania podporujú.

Spravovaná fazuľa je zastaraná v JSF 2.3

Anotácie spravovaných fazúľ boli v JSF 2.3 zastarané a nahradené CDI (kontexty a závislosť vstrekovania). Pomocou nástroja CDI vývojári definujú kontext a do tohto kontextu vkladajú objekty. Tí, ktorí poznajú Managed Beans, nájdu syntax anotácie mierne odlišnú, ale sémantika zostáva úplne rovnaká.

Ovládač fazuľa

V JSF 2.3 poskytujú fazule radiča kontrolór súčasť rovnice MVC. Model poskytujú bežné objekty Java (často nazývané POJO alebo obyčajné staré objekty Java).

Pokiaľ ide o tok procesu, fazuľa radiča:

  1. Rozhodnite sa, kam smerovať žiadosti používateľov
  2. Nastavte POJO pre model
  3. Použite model na vykreslenie pohľadu Facelets

JSF potom zloží dohromady strom komponentov a model, aby vykreslil výstupný HTML.

Zoznam 2 ukazuje, ako by ste definovali javaBean objekt zo zoznamu 1 pomocou CDI. Tento zoznam predpokladá, že aplikácia má vo svojich závislostiach súbor cdi-api-1.2.jar.

Zoznam 2. JavaBean definovaný pomocou CDI

 import javax.inject.Named; import javax.enterprise.context.SessionScoped; @Named @ViewScoped verejná trieda JavaBean implementuje Serializovateľný {private String content = „Vitajte v JSF!“ // getters / setters} 

JSF 2.3 s PrimeFaces

V ďalších častiach vám pomocou PrimeFaces ukážem, ako JSF implementuje vzor MVC, zasielanie správ riadených udalosťami a opakovane použiteľné komponenty. Ak chcete začať, otvorte vitrínu PrimeFaces, kliknite na ikonu Údaje odkaz v ľavom stĺpci a vyberte DataList. Toto vytiahne demo kód DataList pre PrimeFaces.

Obrázok 1 zobrazuje, kde nájdete tieto vzorky.

Matthew Tyson

Obrázok 2 zobrazuje výstup jednoduchej dátovej tabuľky, ktorý je prevzatý z ukážky PrimeFaces DataList.

Matthew Tyson

PrimeFaces DataList: Prístup k dátovému modelu

Zoznam 3 predstavuje označenie pre toto dataList displej. Ak sa posuniete do dolnej časti vitríny PrimeFaces, uvidíte značku v dataList.xhtml tab.

Zoznam 3. Facelet pre PrimeFaces DataList

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

V zozname 3 si všimnite hodnotu majetok dataList zložka. Vidíte, že toto odkazuje a dataListView objekt a pristupuje k .autá1 majetok na ňom. Komponent použije objekt modelu vrátený týmto poľom. Tokeny JSF používajú konvenčné prístupové objekty na odkazovanie na vlastnosti objektov, takže .autá1 bude odkazovať na getCars () getter na objekte.

Ďalej si všimnite var = "auto" nehnuteľnosť. Toto hovorí dataList komponenta, ktorú premennú použiť, keď iteruje nad zoznamom automobilov vráteným hodnotu lúka. Tieto vlastnosti sú špecifické pre dataList zložka, ale hodnotu majetok je veľmi častý. The var atribút je tiež obvyklý pre komponenty, ktoré sa iterujú nad zoznamami.

V tele súčasti v zozname 3 môžete vidieť auto premenná je prístupná prostredníctvom výrazov JSF ako #{značka auta}. Každá iterácia súboru dataListView.cars1 inštancia vygeneruje značka auta lúka.

Všimnite si, že značka demonštruje schopnosť prispôsobiť komponenty tak, ako sa budú zobrazovať. V tomto prípade je hlavička definovaná ako Základné.

Kombináciou údajov so značkami môžete vidieť, ako bude program Facelets XML poháňať tento výstup. Teraz sa pozrime na kód Java, ktorý je za tým.

Komponenty DataList na strane servera

Zoznam 4 ukazuje DataListView, trieda Java, ktorá sa používa pri označení v zozname 3. Krátko uvidíte, ako dataListView inštancia je spojená s DataListView trieda.

Výpis 4. Trieda DataListView

 balíček org.primefaces.showcase.view.data; import java.io.Serializovateľný; 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; importovať org.primefaces.showcase.domain.Car; importovať org.primefaces.showcase.service.CarService; @Named @ViewScoped verejná trieda DataListView implementuje Serializable {private List cars1; súkromné ​​auto vybranéAuto; @Inject ("# {carService}") súkromná služba CarService; @PostConstruct public void init () {cars1 = service.createCars (10); } verejny List getCars1 () {vratit auta1; } public void setService (služba CarService) {this.service = služba; }} 

Zoznam 4 obsahuje niekoľko ďalších dôležitých prvkov, ktoré budeme po kúskoch zvažovať.

Vkladanie závislostí a anotácie

Najskôr si všimnite, že DataListView trieda je anotovaná @ Menovaný, ktoré môžete vidieť z importu import javax.inject.Named; je súčasťou JSF. The @ Menovaný anotácia hovorí JSF, že táto fazuľa je súčasťou aplikácie. The @ViewScoped anotácia informuje JSF, že fazuľa bude žiť iba po celý život pohľadu.

Ďalej si všimnite, že CarService nehnuteľnosť má @Inject anotácia (nazýva sa @ManagedProperty pred JSF 2.3). Toto je ďalšia funkcia JSF, ktorá umožňuje „vzájomné prepojenie fazule“, čo je technika popularizovaná jarným rámcom a inými nástrojmi na vkladanie závislostí. Spoločnosť JSF v podstate nájde autoService objekt v rozsahu a automaticky ho priradiť k služby pole na DataListView objekt.

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