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:
- Rozhodnite sa, kam smerovať žiadosti používateľov
- Nastavte POJO pre model
- 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 TysonObrázok 2 zobrazuje výstup jednoduchej dátovej tabuľky, ktorý je prevzatý z ukážky PrimeFaces DataList.
Matthew TysonPrimeFaces 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.