Programavimas

Kas yra JSF? Pristatome „JavaServer Faces“

„JavaServer Faces“ (JSF) yra „Java“ standartinė technologija, skirta kurti komponentais pagrįstas, į įvykius orientuotas interneto sąsajas. Kaip ir „JavaServer Pages“ (JSP), taip ir JSF leidžia pasiekti serverio duomenis ir logiką. Skirtingai nuo JSP, kuris iš esmės yra HTML puslapis, perpildytas serverio pusės galimybėmis, JSF yra XML dokumentas, kuris vaizduoja formalius loginio medžio komponentus. JSF komponentus remia „Java“ objektai, kurie yra nepriklausomi nuo HTML ir turi visas „Java“ galimybes, įskaitant prieigą prie nuotolinių API ir duomenų bazių.

Pagrindinė tokios sistemos, kaip JSF, idėja yra apibendrinti (arba apvynioti) kliento pusės technologijos, tokios kaip HTML, CSS ir „JavaScript“, leidžiančios kūrėjams kurti žiniatinklio sąsajas be didelės sąveikos su šiomis technologijomis.

Šiame straipsnyje pateikiama JSF požiūrio į komponentų pagrindu veikiančios „Java“ žiniatinklio programų sąsajos kūrimą apžvalga. Paprasti pavyzdžiai supažindina su JSF MVC architektūra, įvykių modeliu ir komponentų biblioteka. Pavyzdžiai apima naujas JSF 2.3 funkcijas, o komponentų bibliotekai naudosime „PrimeFaces“.

Besivystanti JSF

Jau seniai populiarus JSF neseniai susidūrė su „Java“ suderinamų žiniatinklio sistemų, įskaitant kliento „JavaScript“ sistemas, konkurencija. Vis dėlto „JavaServer Faces“ išlieka „Java“ standartu, ypač didelio masto „Java“ įmonių plėtrai. JSF specifikacija taip pat sukūrė daugybę sistemų ir bibliotekų, kurios neatsiliko nuo naujausių kliento pusės patobulinimų. Vienas iš jų yra „PrimeFaces“, kurį mes tyrinėjame šioje pamokoje.

Nors ateities plėtros grafikas nėra aiškus, JSF 2.3 suteikia kūrėjams daug darbo, kol laukiame. Išleistas 2017 m. Kovo mėn., JSF 2.3 buvo tyčia sukurtas JSF modernizuoti. Tarp kelių šimtų mažų remonto ir didesnių atnaujinimų JSF 2.3 nebenaudoja valdomų pupelių komentarų naudai CDI, kuriuos pristatysiu vėliau šioje pamokoje.

JSF 2.3 Džakartoje, EE

2017 m. Rugsėjo mėn. „Oracle“ paskelbė apie savo ketinimą perkelti „Java EE“ į „Eclipse Foundation“. Nuo tada „Java EE“ buvo pakeista į „Jakarta EE“, o JSF 2.3 („Eclipse Mojarra“) buvo patvirtintas tęsti. Kitas svarbus JSF specifikacijos leidimas bus „Eclipse Mojarra 3.0“.

Komponentų pagrindu sukurtų interneto sąsajų kūrimas JSF

Pagrindinė JSF idėja yra sukomplektuoti funkcionalumą į daugkartinio naudojimo komponentus. Tai panašu į daugkartinio naudojimo žymes, naudojamas JSP, tačiau JSF komponentai yra formalesni.

Nors „JavaServer Pages“ galite naudoti JSF puslapius, atskiriems JSF puslapiams kurti dažniausiai naudojamas „Facelets“. Veidrodžiai yra XHTML puslapiai, skirti apibrėžti JSF sąsajas. Naudodami „Facelets“, naudojate XML žymas, kad sukurtumėte komponentų medį, kuris tampa JSF vartotojo sąsajos karkasu.

1 sąraše pateikiamos pagrindinės paprasto JSF puslapio, parašyto naudojant „Facelets“, dalys. Šiame pavyzdyje mes prieiname „Java“ serverio galimybes per pupelę, kuri buvo įtraukta į taikymo sritį per CDI. Daugiau apie CDI pamatysite vėliau.

Sąrašas 1. JSF pavyzdinis puslapis

    Sveiki, JavaWorld! # {javaBean.content} 

1 sąraše matome standartinį XHTML puslapį. „Xset“ viršuje pastatytas „Facelets“ vaizdas. Be XHTML vardų srities, apibrėžiama ir nurodoma antrinė vardų sritis.

h bibliotekoje yra standartiniai komponentai, skirti naudoti JSF HTML puslapiuose. //xmlns.jcp.org/jsf/html biblioteka apibrėžia JSF komponentų kolekciją, šiuo atveju - bendrų HTML elementų rinkinį. Vienas iš šių komponentų yra elementas.

HTML komponentai JSF

Kalbant apie sintaksę, 1 sąrašas elementas nurodo jsf / html biblioteka su h priešdėlis. Tada jis nurodo konkretų bibliotekos komponentą, kuris yra galva komponentas.

komponentas pateikia HTML galvos elementą. (Visa ši sintaksė gali atrodyti kaip pernelyg didelė dėl tokio paprasto tikslo, bet tai yra rimta priežastis, kaip netrukus pamatysite.)

Lizdų komponentai

Galvos viduje įdėtas standartinis HTML elementas. Šis elementas pateikiamas komponentas, kartu su turiniu, į kurį įdėta vaikų elementų.

Dokumento tekste JSF išraišką sudaro #{} sintaksė. Tai yra visiškai analogiška JSP išraiškai su ${} formatas: jis suteikia prieigą prie Java objektų apimties ir paprastų funkcijų.

Pagrindinis JSF modelis yra paprastas: naudokite „Facelets“, kad sukurtumėte XML medį, nurodantį komponentų biblioteką ar bibliotekas, tada naudokite bibliotekos komponentus, kad „Java“ objektai būtų pateikti kaip HTML.

Java objektų naudojimas JSF

Grįžtant prie 1 sąrašo, atkreipkite dėmesį, kad JSF išraiškoje ($ {javaBean.content) javaBean objektas yra taikymo sferoje, kai atliekamas šis žymėjimas. XHTML of Facelets pasiekia .turinys nuosavybė javaBean objektas. Galutinis rezultatas yra žiniatinklio sąsaja, sujungianti „Facelets“ rodinio struktūrą su „Java“ serverio duomenų ir logikos galimybėmis.

JSF išraiškos naudojimas yra tik vienas iš būdų pasiekti „Java“ programos duomenis iš JSF vartotojo sąsajos. Galų gale norėsite išnagrinėti kitus JSF komponento sąveikos su „Java“ vidine sąsaja būdus - tokius kaip duomenų sąrašai ir tinkleliai bei įvairūs įvesties valdikliai. Kol kas pakanka įsisąmoninti, kaip JSF naudoja XML žymas (arba anotacijas), kad sukurtumėte komponentų medį, kuris pateikia HTML, remdamasis Java objektuose esančiais duomenimis.

Anotacijos ir XML

Naudojant JSF 2.3 tapo įmanoma apibrėžti JSF komponentus su anotacijomis, visiškai išvengiant XML metaduomenų. Visiškai įmanoma apibrėžti ir įdiegti JSF programą neredaguojant jokios XML.

JSF programos struktūra

Kaip ir „JavaServer Pages“ bei „Servlet“ API, taip ir „JavaServer Faces“ reikalinga standartinė katalogų struktūra ir metaduomenys. Jie dislokuoti kaip .karas failus.

.War failo struktūra yra panaši į „Servlet“ arba „JSP“ programą. Jame yra a / web-app katalogas, kuriame yra programos žymėjimo failai (šiuo atveju HTML, JSP ir Facelets), taip pat / WEB-INF katalogas, kuriame pateikiami metaduomenys, apibūdinantys programą.

Tarnauja JSF

Nors JSF galite paleisti „Java EE“ talpykloje, pvz., „Glassfish“, viskas, ko jums iš tikrųjų reikia, yra paprastas servleto konteineris. „Tomcat“ yra populiarus JSF ir kitų serverio „Java“ technologijų talpykla.

JSF 2.3: Specifikacijos ir įgyvendinimai

Viena iš „Java“ stipriųjų pusių yra ta, kad ji grindžiama standartais, o tuos standartus valdo atvirojo kodo bendruomenės procesas. Nuo pat įkūrimo „Java Community Process“ (JCP) prižiūrėjo „Java“ technologijos plėtrą. Sukūrus specifikaciją ar patobulinus JCP, ją gali įgyvendinti kelios šalys. Dar neseniai „Servlet“, „JSP“ ir „JSF“ buvo kuriamos naudojant JCP atvirojo kodo specifikacijos procesą.

Naujausia JSF specifikacija šio rašymo metu yra JSF 2.3, išleista kaip „Java EE 8“ dalis 2017 m. „Oracle“ (dabar „Eclipse“) „Mojarra“ yra JSF nuorodų diegimas, o „MyFaces“ ir „PrimeFaces“ yra populiarūs trečiųjų šalių diegimai.

Kiekviena iš šių sistemų įgyvendina JSF šerdį, kurioje yra keletas standartinių komponentų. Pardavėjai taip pat gali pasiūlyti papildomų komponentinių bibliotekų, be standarto. Vertinant JSF sistemas, verta apsvarstyti savo programos poreikius ir kokias komponentų bibliotekas galima sukurti. Idealiu atveju jūsų JSF sistema turėtų jus kuo greičiau priartinti prie to, ko jums reikia, iš karto.

MVC JSF 2.3

JSF yra MVC karkasas, įgyvendinant modelio-rodinio-valdiklio modelį. Pagal MVC modelį idėja yra išskirti tris vartotojo sąsajos problemas į diskretiškas dalis, kad jas būtų lengviau valdyti. Apskritai vaizdas yra atsakinga už duomenų rodymą modelyje, o valdiklis yra atsakingas už modelio nustatymą ir vartotojo nukreipimą į teisingą vaizdą.

JSF diegimo metu vaizdas yra „Facelets“ puslapis su jo XML žymų rinkiniu. Tai apibrėžia vartotojo sąsajos išdėstymą. Kita JSF naudojimo pusė yra serverio pusė, kur „Java“ klasės palaiko tuos vartotojo sąsajos komponentus.

Tvarkomos pupelės nustojo galioti JSF 2.3

Tvarkomų pupelių anotacijos buvo nebenaudojamos JSF 2.3 ir pakeistos CDI (Kontekstai ir priklausomybės injekcija). Naudodamiesi CDI, kūrėjai apibrėžia kontekstą ir į jį įtraukia objektus. Tiems, kurie yra susipažinę su valdomomis pupelėmis, anotacijų sintaksė bus šiek tiek kitokia, tačiau semantika išlieka visiškai ta pati.

Kontrolinės pupelės

Pagal JSF 2.3 kontrolinės pupelės pateikia valdiklis MVC lygties dalis. Normalūs „Java“ objektai (dažnai vadinami POJO arba paprastais senais „Java“ objektais) pateikia modelį.

Kalbant apie proceso srautą, valdiklio pupelės:

  1. Nuspręskite, kur nukreipti vartotojo užklausas
  2. Nustatykite POJO modeliui
  3. Naudokite modelį, kad pateiktumėte „Facelets“ vaizdą

Tada JSF sulanksto komponentų medį ir modelį, kad būtų pateiktas išvesties HTML.

2 sąrašas rodo, kaip jūs apibrėžtumėte javaBean objektas iš 1 sąrašo, naudojant CDI. Šiame sąraše daroma prielaida, kad programos priklausomybė yra cdi-api-1.2.jar.

Sąrašas 2. „JavaBean“, apibrėžtas naudojant CDI

 importuoti javax.inject.Named; importuoti javax.enterprise.context.SessionScoped; @Named @ViewScoped viešoji klasė „JavaBean“ įgyvendina „Serializable“ {private String content = „Sveiki atvykę į JSF!“ // getters / setters} 

JSF 2.3 su „PrimeFaces“

Kitose dalyse aš naudosiu „PrimeFaces“, norėdamas parodyti, kaip JSF įgyvendina MVC modelį, įvykių valdomus pranešimus ir daugkartinio naudojimo komponentus. Norėdami pradėti, atidarykite „PrimeFaces Showcase“, spustelėkite Duomenys kairiajame stulpelyje esančią nuorodą ir pasirinkite „DataList“. Tai atkurs „DataList“ demonstracinį „PrimeFaces“ kodą.

1 paveiksle parodyta, kur galite rasti šiuos pavyzdžius.

Matthew Tysonas

2 paveiksle parodyta paprastos duomenų lentelės išvestis, paimta iš „PrimeFaces DataList“ demonstracinės versijos.

Matthew Tysonas

„PrimeFaces DataList“: prieiga prie duomenų modelio

3 sąraše pateikiami to žymėjimai duomenų sąrašas ekranas. Jei slinksite į „PrimeFaces“ vitrinos apačią, žymėjimą galite pamatyti dataList.xhtml skirtuką.

Sąrašas 3. „PrimeFaces DataList“ aspektas

   Pagrindinis Nr. {Car.brand}, # {car.year} 

3 sąraše atkreipkite dėmesį į vertė nuosavybė duomenų sąrašas komponentas. Galite pamatyti, kad tai nurodo a „dataListView“ objektą ir prieina prie . automobiliai turtas. Komponentas ketina naudoti to lauko grąžintą modelio objektą. JSF žetonai naudoja įprastus prieigos elementus, kad nurodytų objekto savybes, taigi . automobiliai nurodys „getCars“ () Getter ant objekto.

Tada atkreipkite dėmesį į var = "automobilis" nuosavybė. Tai pasako duomenų sąrašas komponentas, kokį kintamąjį naudoti, kai jis pakartoja automobilių, kuriuos grąžino "Windows", sąrašą vertė srityje. Šios savybės būdingos duomenų sąrašas komponentas, bet vertė nuosavybė yra labai paplitusi. var atributas taip pat yra įprastas komponentams, kurie kartojasi per sąrašus.

3 sąrašo komponento tekste galite pamatyti automobilis kintamasis pasiekiamas per tokias JSF išraiškas kaip {{car.brand}. Kiekviena „dataListView.cars“ egzempliorius išves automobilis.ženklas srityje.

Atkreipkite dėmesį, kad žyma rodo galimybę pritaikyti komponentus, kaip jie bus rodomi. Šiuo atveju antraštė apibrėžiama kaip Pagrindinis.

Galite sužinoti, kaip „Facelets XML“ paskatins šią išvestį, sujungdami duomenis su žymėjimu. Dabar pažvelkime į už jo esantį „Java“ kodą.

„DataList“ serverio komponentai

4 sąrašas rodo „DataListView“, Java klasę, kurią naudoja žymėjimas 3 sąraše. Netrukus pamatysite, kaip „dataListView“ egzempliorius yra susijęs su „DataListView“ klasė.

Sąrašas 4. DataListView klasė

 paketas org.primefaces.showcase.view.data; importuoti java.io.Serializable; importuoti java.util.List; importuoti javax.annotation.PostConstruct; importuoti javax.inject.Named; // Pre JSF 2.3, tai buvo: // importuoti javax.faces.bean.ManagedBean; importuoti javax.inject.Inject; importuoti javax.faces.bean.ViewScoped; importuoti org.primefaces.showcase.domain.Car; importuoti org.primefaces.showcase.service.CarService; @Named @ViewScoped viešoji klasė „DataListView“ įgyvendina „Serializable {private list cars1“; privatus automobilis pasirinktas automobilis; @Inject („# {carService}“) privati ​​„CarService“ paslauga; @PostConstruct public void init () {automobiliai1 = service.createCars (10); } public getCars1 () {grąžinti automobilius1; } public void setService („CarService“ paslauga) {this.service = paslauga; }} 

4 sąraše yra keletas kitų svarbių elementų, kuriuos mes apsvarstysime po vieną.

Priklausomybės injekcija ir anotacijos

Pirmiausia atkreipkite dėmesį, kad „DataListView“ klasė yra anotuota @Pavadintas, kurį galite pamatyti iš importo importuoti javax.inject.Named; yra JSF dalis. @Pavadintas anotacijoje JSF nurodoma, kad ši pupelė yra programos dalis. @ViewScoped anotacijoje JSF informuojama, kad pupelė gyvens tik vaizdą.

Tada pastebėkite, kad „CarService“ nuosavybė turi @ Suleiskite anotacija (vadinama @Valdyta nuosavybė iki JSF 2.3). Tai dar viena „JSF“ funkcija, leidžianti pupeles „sujungti“ kartu - „Spring Framework“ ir kitų priklausomybės įpurškimo priemonių išpopuliarinta technika. Iš esmės JSF ras „carService“ objekto taikymo sritį ir automatiškai susieti jį su paslaugą laukas „DataListView“ objektas.