Ohjelmointi

Mikä on JSF? Esittelyssä JavaServer Faces

JavaServer Faces (JSF) on Java-standarditeknologia komponenttipohjaisten, tapahtumapainotteisten verkkoliittymien rakentamiseen. Kuten JavaServer Pages (JSP), JSF sallii pääsyn palvelinpuolen tietoihin ja logiikkaan. Toisin kuin JSP, joka on lähinnä HTML-sivu, joka on täynnä palvelinpuolen ominaisuuksia, JSF on XML-asiakirja, joka edustaa muodollisia komponentteja loogisessa puussa. JSF-komponenttien tukena ovat Java-objektit, jotka ovat riippumattomia HTML-koodista ja joilla on kaikki Java-kyvyt, mukaan lukien etäsovellusliittymien ja tietokantojen käyttö.

JSF: n kaltaisen kehyksen keskeinen ajatus on kapseloida (tai kääri) asiakaspuolen tekniikat, kuten HTML, CSS ja JavaScript, joiden avulla kehittäjät voivat rakentaa verkkoliittymiä ilman paljon vuorovaikutusta näiden tekniikoiden kanssa.

Tässä artikkelissa esitetään tilannekuva JSF: n lähestymistavasta komponenttipohjaiseen käyttöliittymäkehitykseen Java-verkkosovelluksille. Yksinkertaiset esimerkit esittävät JSF: n MVC-arkkitehtuurin, tapahtumamallin ja komponenttikirjaston. Esimerkkejä ovat uudet ominaisuudet JSF 2.3: ssa, ja käytämme PrimeFaceita komponenttikirjastossamme.

Kehittyvä JSF

Pitkään suosittu JSF on viime aikoina kohdannut kilpailua Java-yhteensopivien verkkokehysten, mukaan lukien asiakaspuolen JavaScript-kehysten kanssa. Silti JavaServer Faces on edelleen Java-standardi, erityisesti suurten Java-yritysten kehittämisessä. JSF-spesifikaatio on myös synnyttänyt runsaasti kehyksiä ja kirjastoja, jotka ovat pysyneet mukana viimeaikaisissa asiakaspuolen parannuksissa. Yksi näistä on PrimeFaces, jota tutkimme tässä opetusohjelmassa.

Vaikka tulevan kehityksen aikataulu on epäselvä, JSF 2.3 antaa kehittäjille paljon työtä, kun odotamme. Maaliskuussa 2017 julkaistu JSF 2.3 suunniteltiin tarkoituksella JSF: n modernisoimiseksi. Useiden satojen pienten korjausten ja suurempien päivitysten joukossa JSF 2.3 hylkää hallitut papumerkinnät CDI: n hyväksi, jonka esitän myöhemmin tässä opetusohjelmassa.

JSF 2.3, Jakarta EE

Syyskuussa 2017 Oracle ilmoitti aikomuksestaan ​​siirtää Java EE Eclipse -säätiöön. Java EE on sittemmin nimetty Jakarta EE: ksi, ja JSF 2.3 (Eclipse Mojarra) on hyväksytty jatkamaan. JSF-määrityksen seuraava merkittävä julkaisu on Eclipse Mojarra 3.0.

Komponenttipohjaisten verkkoliittymien rakentaminen JSF: ssä

JSF: n ydinajatuksena on sisällyttää toiminnallisuus uudelleenkäytettäviin komponentteihin. Tämä on samanlainen kuin JSP: ssä käytetyt uudelleenkäytettävät tunnisteet, mutta JSF-komponentit ovat muodollisempia.

Vaikka voit käyttää JSF-sivuja JavaServer Pages -sovelluksessa, on yleisempää käyttää Faceletsia itsenäisten JSF-sivujen luomiseen. Kasvot ovat XHTML-sivuja, jotka on suunniteltu JSF-rajapintojen määrittelemiseen. Facelets-sovelluksen avulla voit luoda XML-tageja komponenttipuusta, josta tulee JSF-käyttöliittymän teline.

Listaus 1 esittää yksinkertaisen JSF-sivun pääosat, jotka on kirjoitettu Facelets-sovelluksella. Tässä esimerkissä pääsemme Java-palvelimen puoleisiin ominaisuuksiin papun kautta, joka on sijoitettu soveltamisalaan CDI: n kautta. Näet lisää CDI: stä myöhemmin.

Luettelo 1. JSF-näytesivu

    Hei JavaWorld! # {javaBean.content} 

Luettelossa 1 näemme tavallisen XHTML-sivun. Facelets-näkymä on rakennettu XHTML: n päälle. XHTML-nimiavaruuden lisäksi määritetään toissijainen nimitila ja siihen viitataan.

h kirjasto sisältää vakiokomponentteja käytettäväksi JSF HTML -sivuilla. //xmlns.jcp.org/jsf/html library määrittelee kokoelman JSF-komponentteja, tässä tapauksessa kokoelman yhteisiä HTML-elementtejä. Yksi näistä komponenteista on elementti.

HTML-komponentit JSF: ssä

Syntaksiin liittyen luettelot 1: t elementti viittaa jsf / html kirjasto h etuliite. Sitten se viittaa kirjaston tiettyyn komponenttiin, joka on pää komponentti.

komponentti tuottaa HTML-pääelementin. (Kaikki tämä syntaksit saattavat tuntua ylenmääräisiltä niin yksinkertaisessa tarkoituksessa, mutta siihen on hyvä syy, kuten näet pian.)

Pesäkomponentit

Pään sisällä on sisäinen tavallinen HTML elementti. Tämä elementti toimitetaan komponentti yhdessä sen sisälle sisäkkäin olevien alielementtien kanssa.

Dokumentin rungossa JSF-lauseke sisältää #{} syntaksi. Tämä on täsmälleen analoginen JSP-lausekkeen kanssa ${} muoto: se sallii Java-objektien käytön laajuudessa ja yksinkertaiset toiminnot.

JSF: n peruskuvio on yksinkertainen: Rakenna Faceletsin avulla XML-puu, joka viittaa komponenttikirjastoon tai kirjastoihin, ja käytä sitten kirjaston komponentteja renderöimällä Java-objektit HTML-muodossa.

Java-objektien käyttäminen JSF: ssä

Palataksesi luetteloon 1, huomaa, että JSF-lausekkeen sisällä ($ {javaBean.content) javaBean objekti on laajuudessa, kun tämä merkintä suoritetaan. Faceletsin XHTML käyttää .sisältö kiinteistö javaBean esine. Lopullinen tulos on verkkoliitäntä, joka yhdistää Facelets-näkymärakenteen Java-palvelimen puolella oleviin tietoihin ja logiikkaominaisuuksiin.

JSF-lausekkeen käyttö on vain yksi tapa käyttää Java-sovellustietoja JSF-käyttöliittymästä. Lopulta sinun kannattaa tutkia muita tapoja, joilla JSF-komponentti voi olla vuorovaikutuksessa Java-taustajärjestelmän kanssa - esimerkiksi tietoluettelot ja ruudukot ja erilaiset syötteenhallintatoimet. Toistaiseksi riittää, että otetaan huomioon, kuinka JSF käyttää XML-tunnisteita (tai merkintöjä) luodakseen komponenttipuun, joka tuottaa HTML: n Java-objektien sisältämien tietojen perusteella.

Merkinnät vs. XML

JSF 2.3: n avulla on tullut mahdollista määritellä JSF-komponentit merkinnöin, välttäen XML-metatietoja kokonaan. JSF-sovellus on täysin mahdollista määritellä ja ottaa käyttöön muokkaamatta XML-tiedostoja.

JSF-sovelluksen rakenne

Kuten JavaServer Pages ja Servlet API, JavaServer Faces vaatii vakiohakemistorakenteen ja metatiedot. Nämä otetaan käyttöön .sota tiedostot.

.War-tiedoston rakenne on samanlainen kuin Servlet- tai JSP-sovellus. Se sisältää / web-app hakemisto, joka sisältää sovelluksen merkintätiedostot (tässä tapauksessa HTML, JSP ja Facelets), sekä / WEB-INF hakemisto, joka esittää sovelluksen kuvaavat metatiedot.

Palvelee JSF: ää

Vaikka voit suorittaa JSF: n Java EE -säiliössä, kuten Glassfish, yksinkertainen servlet-kontti on kaikki mitä todella tarvitset. Tomcat on suosittu säilö JSF: lle ja muille palvelinpuolen Java-tekniikoille.

JSF 2.3: Tekniset tiedot ja toteutukset

Yksi Java-vahvuuksista on, että se perustuu standardeihin, ja näitä standardeja ohjaa avoimen lähdekoodin yhteisöprosessi. Alusta lähtien Java Community Process (JCP) on valvonut Java-tekniikan kehitystä. Kun JCP on kehittänyt ja hyväksynyt eritelmän tai erittelyparannuksen, useat osapuolet voivat toteuttaa sen. Viime aikoihin asti Servletit, JSP ja JSF kehitettiin kaikki käyttäen JCP: n avoimen lähdekoodin määrittelyprosessia.

Viimeisin JSF-määritys tämän kirjoituksen jälkeen on JSF 2.3, joka julkaistiin osana Java EE 8: ta vuonna 2017. Oraclen (nyt Eclipsen) Mojarra on JSF-viitetoteutus, ja MyFaces ja PrimeFaces ovat suosittuja kolmannen osapuolen toteutuksia.

Jokainen näistä kehyksistä toteuttaa JSF-ytimen, joka sisältää joitain vakiokomponentteja. Toimittajat voivat tarjota myös muita komponenttikirjastoja standardin lisäksi. JSF-kehyksiä arvioitaessa on hyvä ottaa huomioon sovelluksesi tarpeet ja käytettävissä olevat komponenttikirjastot, joiden avulla voit rakentaa sitä. Ihannetapauksessa JSF-kehyksesi pitäisi saada sinut mahdollisimman lähelle tarvitsemasi heti alusta alkaen.

MVC JSF: ssä 2.3

JSF on MVC-kehys, mallinäkymä-ohjain-mallin toteuttaminen. MVC-mallissa ajatuksena on erottaa käyttöliittymän kolme huolenpitoa huomaamattomiksi osiksi, jotta niitä on helpompi hallita. Yleensä näkymä on vastuussa tietojen näyttämisestä mallissa, ja ohjain on vastuussa mallin asettamisesta ja käyttäjän ohjaamisesta oikeaan näkymään.

JSF-toteutuksessa näkymä on Facelets-sivu XML-tunnisteilla. Nämä määrittävät käyttöliittymän asettelun. Toinen puoli JSF: n käytöstä on palvelinpuoli, jossa Java-luokat tukevat näitä käyttöliittymäkomponentteja.

Hallitut pavut poistettu käytöstä JSF 2.3: ssa

Hallittujen papujen merkinnät on poistettu käytöstä JSF 2.3: ssa ja korvattu CDI: llä (Contexts and Dependency Injection). CDI: n avulla kehittäjät määrittelevät kontekstin ja injektoivat objekteja kyseiseen kontekstiin. Ne, jotka tuntevat hallitut pavut, huomauttavat syntaksin hieman erilaiseksi, mutta semantiikka pysyy täsmälleen samana.

Ohjainpavut

JSF 2.3: ssa ohjainpavut tarjoavat ohjain osa MVC-yhtälöä. Normaalit Java-objektit (kutsutaan usein POJOiksi tai tavallisiksi vanhoiksi Java-objekteiksi) tarjoavat mallin.

Prosessivirtauksen osalta ohjainpavut:

  1. Päätä, mihin käyttäjäpyynnöt ohjataan
  2. Määritä POJO-mallit mallille
  3. Käytä mallia renderöimään Facelets-näkymä

JSF taittaa sitten komponenttipuun ja mallin muodostamaan HTML-tulosteen.

Listaus 2 näyttää kuinka määrität javaBean kohde luettelosta 1 käyttämällä CDI: tä. Tämä luettelo olettaa, että sovelluksella on cdi-api-1.2.jar riippuvuuksissaan.

Listaus 2. CDI: llä määritetty JavaBean

 tuo javax.inject.Named; tuo javax.enterprise.context.SessionScoped; @Named @ViewScoped julkinen luokka JavaBean toteuttaa Serializable {private String content = "Tervetuloa JSF: ään!" // getters / setters} 

JSF 2.3 ja PrimeFaces

Seuraavissa osissa käytän PrimeFacea näyttämään sinulle, kuinka JSF toteuttaa MVC-mallin, tapahtumavetoisen viestinnän ja uudelleenkäytettävät komponentit. Aloita avaamalla PrimeFaces Showcase, napsauttamalla Tiedot linkki vasemmanpuoleiseen sarakkeeseen ja valitse DataList. Tämä nostaa DataList-demokoodin PrimeFaceille.

Kuva 1 näyttää, mistä nämä näytteet löytyvät.

Matthew Tyson

Kuvassa 2 on esitetty yksinkertaisen tietotaulukon lähtö, joka on otettu PrimeFaces DataList -demosta.

Matthew Tyson

PrimeFaces DataList: Tietomallin käyttö

Listaus 3 esittää tämän merkinnät dataList näyttö. Jos vierität PrimeFaces-esittelyn alaosaan, näet merkinnät dataList.xhtml välilehti.

Listaus 3. PrimeFaces DataList -näyttö

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

Huomaa Listing 3: ssa arvo omaisuus dataList komponentti. Voit nähdä, että tämä viittaa a dataListView objektin ja käyttää Autot 1 omaisuus siinä. Komponentti käyttää kyseisen kentän palauttamaa malliobjektia. JSF-tunnukset käyttävät tavanomaisia ​​lisävarusteita viitatakseen objektiominaisuuksiin Autot 1 viittaa getCars () getter esineeseen.

Seuraavaksi huomaa var = "auto" omaisuus. Tämä kertoo dataList komponentti, mitä muuttujaa käytetään, kun se toistuu arvo ala. Nämä ominaisuudet ovat ominaisia dataList komponentti, mutta arvo omaisuus on hyvin yleistä. var attribuutti on myös tavanomainen komponenteille, jotka toistuvat luetteloiden yli.

Listauksen 3 komponentin rungossa näkyy auto muuttujaan pääsee JSF-lausekkeiden kuten #{automerkki}. Jokainen dataListView.cars 1 esimerkiksi tuottaa automerkki ala.

Huomaa, että tag osoittaa kyvyn mukauttaa komponentteja niiden esitystapaa varten. Tässä tapauksessa otsikko määritetään seuraavasti: Perus.

Näet, kuinka Facelets XML ajaa tätä tulosta yhdistämällä tiedot merkinnöihin. Katsotaan nyt sen takana olevaa Java-koodia.

DataListin palvelinpuolen komponentit

Listaus 4 näyttää DataListView, Java-luokka, jota merkinnät käyttävät Listaus 3. Näet pian kuinka dataListView esimerkki liittyy DataListView luokassa.

Listaus 4. DataListView-luokka

 paketti org.primefaces.showcase.view.data; tuo java.io.Serializable; tuo java.util.List; tuo javax.annotation.PostConstruct; tuo javax.inject.Named; // Ennen JSF 2.3: ta, tämä oli: // tuo javax.faces.bean.ManagedBean; tuo javax.inject.Inject; tuo javax.faces.bean.ViewScoped; tuo org.primefaces.showcase.domain.Car; tuo org.primefaces.showcase.service.CarService; @Named @ViewScoped julkisen luokan DataListView toteuttaa Serializable {private List cars1; yksityisauto valittuAuto; @Inject ("# {carService}") yksityinen CarService-palvelu; @PostConstruct public void init () {cars1 = service.createCars (10); } public list getCars1 () {palaa autoja1; } public void setService (CarService-palvelu) {this.service = palvelu; }} 

Luettelossa 4 on muutama muu tärkeä elementti, joita tarkastelemme pala palalta.

Riippuvuussyöttö ja merkinnät

Ensinnäkin, huomaa, että DataListView luokka on merkitty @Nimi, jonka näet tuonnista tuo javax.inject.Named; on osa JSF: ää. @Nimi huomautus kertoo JSF: lle, että tämä papu on osa sovellusta. @ViewScoped huomautus ilmoittaa JSF: lle, että papu elää vain näkymän elämää.

Seuraavaksi huomaa, että Autopalvelu omaisuudella on @Pistää merkintä (kutsutaan @ManagedProperty ennen JSF 2.3: ta). Tämä on toinen JSF-ominaisuus, jonka avulla pavut voidaan "yhdistää yhteen", tekniikka, jota kevään kehys ja muut riippuvuusinjektiotyökalut suosivat. Pohjimmiltaan JSF löytää Autopalvelu objektin laajuus ja liittää se automaattisesti palvelu kenttä DataListView esine.