Programmēšana

Kas ir JSF? Iepazīstinām ar JavaServer Faces

JavaServer Faces (JSF) ir Java standarta tehnoloģija, lai izveidotu uz komponentiem balstītas, uz notikumiem vērstas tīmekļa saskarnes. Tāpat kā JavaServer Pages (JSP), arī JSF ļauj piekļūt servera puses datiem un loģikai. Atšķirībā no JSP, kas būtībā ir HTML lapa, kas piesātināta ar servera puses iespējām, JSF ir XML dokuments, kas loģiskā kokā attēlo formālās sastāvdaļas. JSF komponentus atbalsta Java objekti, kas ir neatkarīgi no HTML un kuriem ir visas Java iespējas, tostarp piekļuve attālajām API un datu bāzēm.

Galvenā ideja tādai sistēmai kā JSF ir iekapsulēt (vai ietīt) klienta puses tehnoloģijas, piemēram, HTML, CSS un JavaScript, ļaujot izstrādātājiem veidot tīmekļa saskarnes bez lielas mijiedarbības ar šīm tehnoloģijām.

Šajā rakstā ir sniegts momentuzņēmums par JSF pieeju komponentu bāzes lietotāja interfeisa izstrādei Java tīmekļa lietojumprogrammām. Vienkārši piemēri iepazīstina ar JSF MVC arhitektūru, notikumu modeli un komponentu bibliotēku. Piemēri ietver jaunas funkcijas JSF 2.3, un mēs komponentu bibliotēkai izmantosim PrimeFaces.

Attīstās JSF

Ilgi populārs JSF nesen ir saskāries ar Java saderīgu tīmekļa sistēmu, tostarp klienta puses JavaScript sistēmu, konkurenci. Tomēr JavaServer Faces joprojām ir Java standarts, īpaši liela apjoma Java uzņēmumu attīstībai. JSF specifikācija ir radījusi arī daudz sistēmu un bibliotēku, kas neatpaliek no jaunākajiem klienta puses uzlabojumiem. Viena no tām ir PrimeFaces, kuras mēs izpētām šajā apmācībā.

Kaut arī turpmākās attīstības grafiks nav skaidrs, JSF 2.3 dod izstrādātājiem daudz darba, kamēr mēs gaidām. Izlaists 2017. gada martā, JSF 2.3 tika apzināti izstrādāts, lai modernizētu JSF. Starp vairākiem simtiem mazu remontu un lielākiem atjauninājumiem JSF 2.3 noveco pārvaldīto pupiņu anotācijas par labu CDI, kuras es iepazīstināšu vēlāk šajā apmācībā.

JSF 2.3 Džakartā EE

2017. gada septembrī Oracle paziņoja par nodomu pāriet uz Java EE uz Eclipse Foundation. Kopš tā laika Java EE tiek pārdēvēts par Jakarta EE, un turpināšanai ir pieņemts JSF 2.3 (Eclipse Mojarra). Nākamais lielākais JSF specifikācijas izlaidums būs Eclipse Mojarra 3.0.

Uz komponentiem balstītu tīmekļa saskarņu veidošana JSF

JSF galvenā ideja ir iekapsulēt funkcionalitāti atkārtoti lietojamās sastāvdaļās. Tas ir līdzīgi JSP izmantotajiem atkārtoti lietojamiem tagiem, taču JSF komponenti ir formālāki.

Kaut arī JSF lapas varat izmantot JavaServer Pages, atsevišķu JSF lapu veidošanai biežāk tiek izmantots Facelets. Sejas ir XHTML lapas, kas paredzētas JSF saskarņu definēšanai. Izmantojot Facelets, jūs izmantojat XML tagus, lai izveidotu komponentu koku, kas kļūst par JSF lietotāja saskarnes sastatni.

1. saraksts parāda vienkāršās JSF lapas, kas rakstīta, izmantojot Facelets, galvenās daļas. Šajā piemērā mēs piekļūstam Java servera puses spējām, izmantojot pupiņu, kas ir iekļauta darbības jomā, izmantojot CDI. Vairāk par CDI jūs redzēsiet vēlāk.

Saraksts 1. JSF parauga lapa

    Sveiki JavaWorld! # {javaBean.content} 

Sarakstā 1 mēs redzam standarta XHTML lapu. XHTML virsū ir izveidots skats Facelets. Papildus XHTML nosaukumvietai tiek definēta un atsaukta sekundārā nosaukumvieta.

The h bibliotēka satur standarta komponentus izmantošanai JSF HTML lapās. The //xmlns.jcp.org/jsf/html bibliotēka definē JSF komponentu kolekciju, šajā gadījumā kopīgu HTML elementu kolekciju. Viena no šīm sastāvdaļām ir elements.

HTML komponenti JSF

Sintakses ziņā 1. saraksts elements atsaucas uz jsf / html bibliotēka ar h priedēklis. Tad tas atsaucas uz konkrēto bibliotēkas komponentu, kas ir galva komponents.

The komponents izvada HTML galvas elementu. (Visa šī sintakse var šķist pārspīlēta tik vienkāršam mērķim, taču tam ir labs iemesls, kā jūs drīz redzēsit.)

Ligzdošanas komponenti

Galvas iekšpusē ir ievietots standarta HTML elements. Šis elements ir paredzēts komponents, kā arī tajā ievietotie bērnu elementi.

Dokumenta tekstā JSF izteiksmi satur #{} sintakse. Tas ir tieši analogs JSP izteiksmei ar ${} formāts: tas ļauj piekļūt Java objektiem darbības jomā un vienkāršām funkcijām.

JSF pamata modelis ir vienkāršs: Izmantojiet Facelets, lai izveidotu XML koku, kas atsaucas uz komponentu bibliotēku vai bibliotēkām, pēc tam izmantojiet komponentus bibliotēkā, lai renderētu Java objektus kā HTML.

Java objektu izmantošana JSF

Atgriežoties pie 1. saraksta, ievērojiet, ka JSF izteiksmē ($ {javaBean.content) javaBean objekts ir darbības jomā, kad tiek veikta šī iezīmēšana. Facelets XHTML piekļūst .saturs īpašums javaBean objekts. Galīgā izeja ir tīmekļa saskarne, kas apvieno skatu struktūru Facelets ar Java servera puses datu un loģikas iespējām.

JSF izteiksmes izmantošana ir tikai viens no veidiem, kā piekļūt Java lietojumprogrammas datiem no JSF lietotāja saskarnes. Galu galā jūs vēlaties izpētīt citus veidus, kā JSF komponents var mijiedarboties ar Java aizmuguri - tādas kā datu saraksti un režģi un dažādas ievades vadīklas. Pagaidām ir pietiekami absorbēt to, kā JSF izmanto XML tagus (vai anotācijas), lai izveidotu komponentu koku, kas izvada HTML, pamatojoties uz Java objektos esošajiem datiem.

Anotācijas pret XML

Ar JSF 2.3 ir kļuvis iespējams definēt JSF komponentus ar anotācijām, pilnībā izvairoties no XML metadatiem. JSF lietotni ir pilnīgi iespējams definēt un izvietot bez rediģēšanas XML.

JSF lietojumprogrammas struktūra

Tāpat kā JavaServer Pages un Servlet API, arī JavaServer Faces nepieciešama standarta direktoriju struktūra un metadati. Tie tiek izvietoti kā .kara failus.

.War faila struktūra ir līdzīga Servlet vai JSP lietojumprogrammai. Tas satur a / web-app direktoriju, kurā atrodas lietojumprogrammas iezīmēšanas faili (šajā gadījumā HTML, JSP un Facelets), kā arī / WEB-INF direktorijā, kurā tiek parādīti metadati, lai aprakstītu lietojumprogrammu.

Apkalpoju JSF

Lai gan jūs varat palaist JSF Java EE konteinerā, piemēram, Glassfish, viss, kas jums patiešām nepieciešams, ir vienkāršs servleta konteiners. Tomcat ir populārs konteiners JSF un citām servera puses Java tehnoloģijām.

JSF 2.3: Specifikācijas un ieviešana

Viena no Java priekšrocībām ir tā, ka tā balstās uz standartiem, un šos standartus regulē atvērtā koda kopienas process. Kopš darbības sākuma Java kopienas process (JCP) pārrauga Java tehnoloģiju attīstību. Kad JCP ir izstrādājusi un apstiprinājusi specifikāciju vai specifikācijas uzlabojumu, to var ieviest vairākas puses. Vēl nesen Servlets, JSP un JSF tika izstrādāti, izmantojot JCP atvērtā pirmkoda specifikācijas procesu.

Jaunākā JSF specifikācija šajā rakstā ir JSF 2.3, kas tika izlaista kā Java EE 8 daļa 2017. gadā. Oracle (tagad Eclipse) Mojarra ir JSF atsauces ieviešana, un MyFaces un PrimeFaces ir populāri trešo personu ieviešanas varianti.

Katrs no šiem ietvariem īsteno JSF kodolu, kas ietver dažus standarta komponentus. Pārdevēji papildus standartam var piedāvāt arī papildu komponentu bibliotēkas. Novērtējot JSF ietvarus, ieteicams apsvērt lietojumprogrammas vajadzības un to, kādas komponentu bibliotēkas ir pieejamas, lai palīdzētu jums to izveidot. Ideālā gadījumā jūsu JSF ietvaram vajadzētu pēc iespējas tuvināties vajadzīgajam tieši no kastes.

MVC JSF 2.3

JSF ir MVC ietvars, ieviešot modeļa skata-kontroliera modeli. MVC modelī ideja ir sadalīt trīs lietotāja saskarnes problēmas diskrētās daļās, lai tās būtu vieglāk pārvaldīt. Kopumā skats ir atbildīga par datu parādīšanu modelī, un kontrolieris ir atbildīgs par modeļa iestatīšanu un lietotāja novirzīšanu pareizajā skatā.

JSF ieviešanā skats ir lapa Facelets ar tās XML tagu kopu. Tie nosaka lietotāja saskarnes izkārtojumu. Otra JSF izmantošanas puse ir servera puse, kur Java klases atbalsta šos lietotāja interfeisa komponentus.

Pārvaldītās pupiņas ir novecojušas JSF 2.3

Pārvaldītās pupiņu anotācijas ir novecojušas JSF 2.3 un aizstātas ar CDI (Contexts and Dependency Injection). Izmantojot CDI, izstrādātāji definē kontekstu un injicē objektus šajā kontekstā. Tiem, kas pārzina pārvaldītās pupiņas, anotācijas sintakse būs nedaudz atšķirīga, bet semantika paliek tieši tāda pati.

Kontroliera pupiņas

JSF 2.3 kontrolieru pupiņas nodrošina kontrolieris daļa no MVC vienādojuma. Parastie Java objekti (bieži saukti par POJO vai vienkārši veci Java objekti) nodrošina modeli.

Procesa plūsmas ziņā kontroliera pupiņas:

  1. Izlemiet, kur novirzīt lietotāju pieprasījumus
  2. Iestatiet modelim POJO
  3. Izmantojiet modeli, lai renderētu skatu Facelets

Pēc tam JSF saliek komponentu koku un modeli, lai padarītu izvades HTML.

2. saraksts parāda, kā jūs definētu javaBean objekts no 1. saraksta, izmantojot CDI. Šajā sarakstā tiek pieņemts, ka lietojumprogrammas atkarībās ir cdi-api-1.2.jar.

Saraksts 2. JavaBean, kas definēts, izmantojot CDI

 importēt javax.inject.Named; importēt javax.enterprise.context.SessionScoped; @Named @ViewScoped publiskā klase JavaBean ievieš Serializable {private String content = "Laipni lūdzam JSF!" // getters / setters} 

JSF 2.3 ar PrimeFaces

Nākamajās sadaļās es izmantošu PrimeFaces, lai parādītu, kā JSF īsteno MVC modeli, notikumu balstītu ziņojumapmaiņu un atkārtoti izmantojamus komponentus. Lai sāktu, atveriet PrimeFaces vitrīnu, noklikšķiniet uz Dati kreisās puses kolonnā un atlasiet DataList. Tas iegūs DataList demonstrācijas kodu PrimeFaces.

1. attēlā parādīts, kur atrast šos paraugus.

Metjū Taisons

2. attēlā parādīta vienkāršas datu tabulas izeja, kas ņemta no demonstrācijas PrimeFaces DataList.

Metjū Taisons

PrimeFaces DataList: Piekļuve datu modelim

3. saraksts parāda šī marķējumu dataList displejs. Ja ritināsiet līdz PrimeFaces vitrīnas apakšdaļai, marķējumu var redzēt dataList.xhtml cilni.

3. saraksts PrimeFaces DataList

   Pamata # {car.brand}, # {car.year} 

3. sarakstā pamaniet vērtība īpašums dataList komponents. Var redzēt, ka šī atsauce a dataListView objektu un piekļūst . automašīnas1 īpašums uz tā. Komponents izmantos modeļa objektu, ko atgriezis šis lauks. JSF marķieri izmanto parastos piekļuves objektus, lai atsauktos uz objekta īpašībām, tātad . automašīnas1 atsauksies uz getCars () getter par objektu.

Pēc tam ievērojiet var = "auto" īpašums. Tas stāsta dataList komponents, kādu mainīgo izmantot, kad tas atkārtojas par automašīnu sarakstu, ko atgriezusi vērtība laukā. Šīs īpašības ir raksturīgas dataList sastāvdaļa, bet vērtība īpašums ir ļoti izplatīts. The var atribūts ir parasts arī komponentiem, kas atkārtojas pa sarakstiem.

3. saraksta komponenta pamattekstā jūs varat redzēt mašīna mainīgajam var piekļūt, izmantojot tādas JSF izteiksmes kā # {car.brand}. Katra dataListView.cars1 piemērs izvadīs auto.zīmols laukā.

Ievērojiet, ka tags parāda spēju pielāgot komponentus, kā tie tiks parādīti. Šajā gadījumā galvene tiek definēta kā Pamata.

Kombinējot datus ar marķējumu, jūs varat redzēt, kā Facelets XML virzīs šo izvadi. Tagad apskatīsim Java kodu, kas atrodas aiz tā.

DataList servera puses komponenti

4. saraksts parāda DataListView, Java klase, kuru 3. marķējums izmanto marķējumā. Drīz jūs redzēsiet, kā dataListView gadījums ir saistīts ar DataListView klasē.

Saraksts 4. DataListView klase

 pakete org.primefaces.showcase.view.data; importēt java.io.Serializable; importēt java.util.List; importēt javax.annotation.PostConstruct; importēt javax.inject.Named; // Pirms JSF 2.3, tas bija: // importēt javax.faces.bean.ManagedBean; importēt javax.inject.Inject; importēt javax.faces.bean.ViewScoped; importēt org.primefaces.showcase.domain.Car; importēt org.primefaces.showcase.service.CarService; @Named @ViewScoped publiskā klase DataListView ievieš Serializable {private List cars1; privāts auto izvēlētsCar; @Inject ("# {carService}") privātais CarService pakalpojums; @PostConstruct public void init () {cars1 = service.createCars (10); } public getCars1 () {atgriešanās automašīnas1; } public void setService (CarService pakalpojums) {this.service = pakalpojums; }} 

4. sarakstā ir daži citi svarīgi elementi, kurus mēs apsvērsim pa gabalu.

Atkarības ievadīšana un anotācijas

Pirmkārt, ievērojiet, ka DataListView klase ir anotēta ar @ Nosaukts, kuru varat redzēt no importēšanas importēt javax.inject.Named; ir daļa no JSF. The @ Nosaukts anotācija norāda JSF, ka šī pupiņa ir lietotnes daļa. The @ViewScoped anotācija informē JSF, ka pupiņa dzīvos tikai skata mūžu.

Pēc tam novērojiet, ka CarService īpašumam ir @ Injicēt anotācija (saukta par @ManagedProperty pirms JSF 2.3). Šī ir vēl viena JSF funkcija, kas ļauj pupiņas "savilkt kopā" ​​- tehniku, ko popularizēja Spring Framework un citi atkarības injekcijas rīki. Būtībā JSF atradīs carService objekts darbības jomā un automātiski saistīts ar apkalpošana lauks DataListView objekts.

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