JavaServer Faces (JSF) je Java standardna tehnologija za izdelavo spletnih vmesnikov, usmerjenih v komponente. Tako kot JavaServer Pages (JSP) tudi JSF omogoča dostop do podatkov in logike na strani strežnika. Za razliko od JSP, ki je v bistvu stran HTML, prežeta s sposobnostmi na strani strežnika, je JSF dokument XML, ki predstavlja formalne komponente v logičnem drevesu. Komponente JSF podpirajo objekti Java, ki so neodvisni od HTML-ja in imajo celoten obseg zmožnosti Java, vključno z dostopom do oddaljenih API-jev in baz podatkov.
Ključna ideja okvira, kot je JSF, je enkapsulacija (ali zaviti) odjemalske tehnologije, kot so HTML, CSS in JavaScript, ki razvijalcem omogočajo izdelavo spletnih vmesnikov brez večje interakcije s temi tehnologijami.
Ta članek predstavlja posnetek pristopa JSF k razvoju uporabniškega vmesnika na osnovi komponent za spletne aplikacije Java. Preprosti primeri predstavljajo arhitekturo MVC JSF, model dogodkov in knjižnico komponent. Primeri vključujejo nove funkcije v JSF 2.3, za knjižnico komponent pa bomo uporabili PrimeFaces.
Razvijanje JSF
Dolgo priljubljen JSF se je pred kratkim soočil s konkurenco spletnih združenj, združljivih z Javo, vključno z okviri JavaScript na strani odjemalca. Kljub temu JavaServer Faces ostaja standard Java, zlasti za obsežen razvoj Java podjetij. Specifikacija JSF je ustvarila tudi veliko okvirov in knjižnic, ki so sledili nedavnim izboljšavam na strani odjemalca. Eden od teh je PrimeFaces, ki ga raziskujemo v tej vadnici.
Čeprav je razpored za prihodnji razvoj nejasen, ima JSF 2.3 razvijalcem veliko dela, medtem ko čakamo. Izšel marca 2017, JSF 2.3 je bil namerno zasnovan za posodobitev JSF. Med več sto majhnimi popravili in večjimi posodobitvami JSF 2.3 opusti upravljane opombe fižolov v korist CDI, ki jih bom predstavil kasneje v tej vadnici.
JSF 2.3 v Džakarti EE
Septembra 2017 je Oracle objavil namero o prehodu Java EE na fundacijo Eclipse. Java EE je bila od takrat preimenovana v Jakarta EE, JSF 2.3 (Eclipse Mojarra) pa je bil sprejet za nadaljevanje. Naslednja velika izdaja specifikacije JSF bo Eclipse Mojarra 3.0.
Izdelava spletnih vmesnikov na osnovi komponent v JSF
Glavna ideja JSF je združiti funkcionalnost v komponente za večkratno uporabo. To je podobno oznakam za večkratno uporabo v JSP, vendar so komponente JSF bolj formalne.
Medtem ko lahko strani JSF uporabljate znotraj strani JavaServer Pages, je pogosteje uporaba Faceletov za izdelavo samostojnih strani JSF. Facelets so strani XHTML, namenjene definiranju vmesnikov JSF. Z Faceleti z oznakami XML ustvarite drevo komponent, ki postane oder za uporabniški vmesnik JSF.
V seznamu 1 so predstavljeni glavni deli preproste strani JSF, napisane s pomočjo Facelets. V tem primeru dostopamo do zmožnosti Java na strežniški strani prek zrna, ki je bil postavljen v obseg prek CDI. Več o CDI boste videli kasneje.
Seznam 1. Vzorčna stran JSF
Pozdravljeni JavaWorld! # {javaBean.content}
V seznamu 1 vidimo standardno stran XHTML. Pogled Facelets je zgrajen na vrhu XHTML. Poleg imenskega prostora XHTML je definiran in sklican na sekundarni imenski prostor.
The h
knjižnica vsebuje standardne komponente za uporabo na straneh HTML JSF. The //xmlns.jcp.org/jsf/html
knjižnica definira zbirko komponent JSF, v tem primeru zbirko pogostih elementov HTML. Ena od teh komponent je element.
Komponente HTML v JSF
Kar zadeva sintakso, seznam 1 element se sklicuje na
jsf / html
knjižnica z h
predpono. Nato se sklicuje na določeno komponento v knjižnici, ki je glavo
komponenta.
The komponenta izpiše element glave HTML. (Vsa ta sintaksa se morda zdi pretirana za tako preprost namen, vendar za to obstaja dober razlog, kot boste kmalu videli.)
Komponente za gnezdenje
V glavo je ugnezden standardni HTML element. Ta element je na voljo
komponenta, skupaj z vsebinskimi podrejenimi elementi, ki so ugnezdeni v njej.
V telesu dokumenta vsebuje izraz JSF #{}
skladnja. To je popolnoma analogno izrazu JSP z ${}
format: omogoča dostop do predmetov Java po obsegu in enostavnih funkcij.
Osnovni vzorec za JSF je preprost: z obrazci ustvarite drevo XML, ki se sklicuje na knjižnico komponent ali knjižnice, nato pa uporabite komponente v knjižnici za upodabljanje predmetov Java kot HTML.
Uporaba predmetov Java v JSF
Če se vrnemo na seznam 1, opazimo, da znotraj izraza JSF ($ {javaBean.content
) The javaBean
objekt je v obsegu, ko se izvede ta oznaka. XHTML obrazcev dostopa do .vsebina
nepremičnine na javaBean
predmet. Končni izhod je spletni vmesnik, ki združuje strukturo pogleda Facelets z Javinimi podatkovnimi in logičnimi zmožnostmi na strani strežnika.
Uporaba izraza JSF je le en način za dostop do podatkov aplikacije Java iz uporabniškega vmesnika JSF. Sčasoma boste želeli raziskati še druge načine, kako lahko komponenta JSF komunicira z zaledjem Java - stvari, kot so seznami podatkov in mreže in različni kontrolniki za vnos. Za zdaj je dovolj, da vpišemo, kako JSF uporablja oznake XML (ali pripise) za ustvarjanje drevesa komponent, ki odda HTML na podlagi podatkov, ki jih vsebujejo predmeti Java.
Pripisi proti XML
Z JSF 2.3 je postalo mogoče opredeliti komponente JSF z opombami, pri čemer se v celoti izognemo metapodatkom XML. V celoti je mogoče definirati in uvesti aplikacijo JSF brez urejanja XML.
Struktura aplikacije JSF
Tako kot strani JavaServer in API Servlet tudi JavaServer Faces zahteva standardno strukturo imenikov in metapodatke. Ti so razporejeni kot .vojna datotek.
Struktura datoteke .war je podobna aplikaciji Servlet ali JSP. Vsebuje a / spletna aplikacija
imenik, v katerem so datoteke za označevanje aplikacije (v tem primeru HTML, JSP in Facelets), kot tudi / WEB-INF
imenik, ki predstavlja metapodatke za opis aplikacije.
Vročanje JSF
Čeprav lahko JSF zaženete v vsebniku Java EE, kot je Glassfish, je preprost vsebnik strežniškega programčka vse, kar res potrebujete. Tomcat je priljubljen vsebnik za JSF in druge tehnologije Java na strežniški strani.
JSF 2.3: Specifikacije in izvedbe
Ena izmed prednosti Java je, da temelji na standardih in jih ureja odprtokodni postopek skupnosti. Od svoje ustanovitve je Java Community Process (JCP) nadzoroval razvoj tehnologije Java. Ko je specifikacija ali izboljšanje specifikacije razvita in odobrena s strani JCP, jo lahko izvaja več strani. Do nedavnega so bili vsi Servleti, JSP in JSF razviti z odprtokodnim postopkom specifikacije JCP.
Najnovejša specifikacija JSF od tega pisanja je JSF 2.3, ki je bila izdana kot del Java EE 8 leta 2017. Oraclova (zdaj Eclipsejeva) Mojarra je referenčna izvedba JSF, MyFaces in PrimeFaces pa sta priljubljeni neodvisni izvedbi.
Vsak od teh okvirov izvaja jedro JSF, ki vključuje nekaj standardnih komponent. Dobavitelji lahko poleg standardov ponujajo tudi dodatne knjižnice komponent. Pri ocenjevanju okvirov JSF je dobro upoštevati potrebe vaše aplikacije in katere knjižnice komponent so na voljo za njeno izdelavo. V idealnem primeru bi vas moral vaš okvir JSF čim prej približati tistemu, kar potrebujete, že takoj.
MVC v JSF 2.3
JSF je Okvir MVC, ki izvaja vzorec model-pogled-krmilnik. V vzorcu MVC je ideja ločiti tri pomisleke uporabniškega vmesnika na diskretne dele, da jih je lažje upravljati. Na splošno pogled je odgovoren za prikaz podatkov v modelu, in krmilnik je odgovoren za nastavitev modela in usmerjanje uporabnika v pravilen pogled.
V izvedbi JSF je pogled stran Facelets z naborom oznak XML. Ti določajo postavitev uporabniškega vmesnika. Druga polovica uporabe JSF je na strani strežnika, kjer razredi Java podpirajo te komponente uporabniškega vmesnika.
Upravljani fižol, zastarel v JSF 2.3
Upravljani pripisi fižolov so opuščeni v JSF 2.3 in nadomeščeni s CDI (Contexts and Dependency Injection). S CDI razvijalci definirajo kontekst in v njega vbrizgajo predmete. Za tiste, ki poznajo upravljani fižol, se sintaksa pripisov nekoliko razlikuje, vendar semantika ostaja popolnoma enaka.
Krmilnik fižol
V JSF 2.3 fižol krmilnika zagotavlja krmilnik del enačbe MVC. Običajni predmeti Java (pogosto imenovani POJO ali navadni stari predmeti Java) zagotavljajo model.
Kar zadeva pretok procesa, fižol krmilnika:
- Odločite se, kam usmeriti uporabniške zahteve
- Za model nastavite POJO
- Z modelom upodobite pogled Facelets
Nato JSF zloži drevo komponent in model, da upodobi izhodni HTML.
Seznam 2 prikazuje, kako bi definirali javaBean
objekt iz seznama 1 z uporabo CDI. Ta seznam predvideva, da ima aplikacija v odvisnosti cdi-api-1.2.jar.
Seznam 2. JavaBean, definiran s CDI
uvoz javax.inject.Named; uvoz javax.enterprise.context.SessionScoped; Javni razred @Named @ViewScoped JavaBean izvaja Serializable {private String content = "Dobrodošli v JSF!" // getters / setters}
JSF 2.3 s PrimeFaces
V naslednjih razdelkih bom z PrimeFaces pokazal, kako JSF izvaja vzorec MVC, sporočanje na podlagi dogodkov in komponente za večkratno uporabo. Za začetek odprite vitrino PrimeFaces, kliknite Podatki povezavo v levem stolpcu in izberite DataList. To bo potegnilo demo kodo DataList za PrimeFaces.
Slika 1 prikazuje, kje najti te vzorce.

Slika 2 prikazuje rezultat preproste podatkovne tabele, ki je vzeta iz predstavitve PrimeFaces DataList.

PrimeFaces DataList: dostop do podatkovnega modela
Seznam 3 predstavlja oznako za to dataList
zaslon. Če se pomaknete na dno vitrine PrimeFaces, lahko oznako vidite v dataList.xhtml
zavihek.
Seznam 3. Obrazec za PrimeFaces DataList
Osnovno # {car.brand}, # {car.year}
Na seznamu 3 upoštevajte vrednost
lastnina dataList
komponenta. Vidite, da se to sklicuje na a dataListView
predmet in dostopa do .cars1
lastnine na njem. Komponenta bo uporabila modelni objekt, ki ga vrne to polje. Žetoni JSF uporabljajo običajne dostopnike za sklicevanje na lastnosti predmeta, torej .cars1
se bo nanašala na getCars ()
pridobivanje predmeta.
Nato opazite var = "avto"
lastnine. To pove dataList
komponento, katero spremenljivko uporabiti, ko se ponovi nad seznamom avtomobilov, ki jih vrne vrednost
polje. Te lastnosti so značilne za dataList
komponenta, ampak vrednost
lastnina je zelo pogosta. The var
atribut je običajen tudi za komponente, ki se ponavljajo po seznamih.
V telesu komponente na seznamu 3 lahko vidite avto
Do spremenljivke se dostopa prek izrazov JSF, kot je # {car.brand}
. Vsaka ponovitev dataListView.cars1
bo izpisal avto.brand
polje.
Upoštevajte, da tag dokazuje sposobnost prilagajanja komponent glede na njihov prikaz. V tem primeru je glava definirana kot
Osnovno
.
Ogledate si lahko, kako bo XML Facelets usmerjal ta izhod s kombiniranjem podatkov z oznako. Zdaj pa poglejmo kodo Java, ki stoji za tem.
Komponente na strani strežnika DataList
Seznam 4 prikazuje DataListView
, razred Java, ki ga oznaka uporablja na seznamu 3. Kmalu boste videli, kako dataListView
primerek je povezan z DataListView
razred.
Seznam 4. Razred DataListView
paket org.primefaces.showcase.view.data; import java.io.Serializable; uvoz java.util.List; uvoz javax.annotation.PostConstruct; uvoz javax.inject.Named; // Pred JSF 2.3, to je bilo: // uvoz javax.faces.bean.ManagedBean; uvoz javax.inject.Inject; uvoz javax.faces.bean.ViewScoped; uvoz org.primefaces.showcase.domain.Car; uvoz org.primefaces.showcase.service.CarService; @Named @ViewScoped javni razred DataListView izvaja Serializable {zasebni seznam cars1; zasebni avto izbrani avto; @Inject ("# {carService}") zasebna storitev CarService; @PostConstruct javna void init () {cars1 = service.createCars (10); } javni seznam getCars1 () {return cars1; } javna void setService (storitev CarService) {this.service = storitev; }}
Seznam 4 vsebuje še nekaj pomembnih elementov, ki jih bomo obravnavali po delih.
Vbrizganje odvisnosti in pripisi
Najprej opazite, da DataListView
razred je označen z @Named
, kar lahko vidite iz uvoza uvoz javax.inject.Named;
je del JSF. The @Named
pripis pove JSF, da je fižol del aplikacije. The @ViewScoped
pripis obvešča JSF, da bo fižol živel samo življenje v pogledu.
Nato opazite, da CarService
lastnina ima @Inject
pripis (imenovan @ManagedProperty
pred JSF 2.3). To je še ena funkcija JSF, ki omogoča, da se fižol "poveže skupaj", tehniko, ki jo popularizira Spring framework in druga orodja za vbrizgavanje odvisnosti. V bistvu bo JSF našel carService
predmet v obsegu in ga samodejno povežite z storitev
polje na DataListView
predmet.