Programiranje

Kaj je JSF? Predstavljamo obraze JavaServer

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:

  1. Odločite se, kam usmeriti uporabniške zahteve
  2. Za model nastavite POJO
  3. 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.

Matthew Tyson

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

Matthew Tyson

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.

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