Uvod u Apache tapiseriju

1. Pregled

Danas su sve aktivnosti, od socijalnih mreža do bankarstva, zdravstvene zaštite do državnih službi, dostupne na mreži. Stoga se u velikoj mjeri oslanjaju na web aplikacije.

Web aplikacija omogućuje korisnicima da uživaju u mrežnim uslugama tvrtke. Istodobno, djeluje kao sučelje za pozadinski softver.

U ovom uvodnom vodiču istražit ćemo mrežni okvir Apache Tapestry i stvoriti jednostavnu web aplikaciju koristeći osnovne značajke koje pruža.

2. Apache Tapiserija

Apache Tapestry okvir je zasnovan na komponentama za izgradnju skalabilnih web aplikacija.

Slijedi konvencija-nad-konfiguracijom paradigmu i koristi napomene i konvencije imenovanja za konfiguracije.

Sve komponente su jednostavni POJO-ovi. Istodobno su razvijeni od nule i ne ovise o drugim knjižnicama.

Zajedno s podrškom za Ajax, Tapestry također ima velike mogućnosti izvještavanja o iznimkama. Pruža opsežnu biblioteku ugrađenih zajedničkih komponenata.

Među ostalim sjajnim značajkama, istaknuta je vruće ponovno učitavanje koda. Stoga, koristeći ovu značajku, promjene možemo odmah vidjeti u razvojnom okruženju.

3. Postavljanje

Apache Tapestry zahtijeva jednostavan set alata za izradu web aplikacije:

  • Java 1.6 ili noviji
  • Alat za izgradnju (Maven ili Gradle)
  • IDE (Eclipse ili IntelliJ)
  • Aplikacijski poslužitelj (Tomcat ili Jetty)

U ovom uputstvu koristit ćemo kombinaciju Java 8, Maven, Eclipse i Jetty Server.

Za postavljanje najnovijeg projekta Apache Tapestry koristit ćemo arhetip Maven i slijediti upute dane u službenoj dokumentaciji:

$ mvn arhetip: generiraj -DarchetypeCatalog = // tapestry.apache.org

Ili, ako imamo postojeći projekt, jednostavno možemo dodati ovisnost Mavena o jezgri tapiserije pom.xml:

 org.apache.tapiserija tapiserija-jezgra 5.4.5 

Nakon što završimo s postavljanjem, možemo pokrenuti aplikaciju apache-tapiserija slijedećom Mavenovom naredbom:

$ mvn jetty: trči

Aplikaciji će prema zadanim postavkama biti dostupan na localhost: 8080 / apache-tapiserija:

4. Struktura projekta

Istražimo izgled projekta koji je kreirao Apache Tapestry:

Možemo vidjeti strukturu projekta sličnu Mavenu, zajedno s nekoliko paketa temeljenih na konvencijama.

Java klase smještene su u src / main / java i kategorizirana kao komponente, stranice, i usluge.

Također, src / glavni / resursi držite naše predloške (slično HTML datotekama) - oni imaju .tml produženje.

Za svaki Java razred smješten pod komponente i stranice direktorija, treba stvoriti datoteku predloška s istim imenom.

The src / main / webapp direktorij sadrži resurse poput slika, tablica stilova i JavaScript datoteka. Slično tome, datoteke za testiranje smještene su u src / test.

Posljednji, src / web mjesto sadržavat će dokumentacijske datoteke.

Za bolju ideju, pogledajmo strukturu projekta otvorenu u Eclipse IDE:

5. Bilješke

Razgovarajmo o nekoliko korisnih napomena koje Apache Tapiserija nudi za svakodnevnu upotrebu. Ubuduće ćemo upotrebljavati ove bilješke u našim implementacijama.

5.1. @Ubrizgati

The @Ubrizgati napomena je dostupna u org.apache.tapestry5.ioc.notacije paket i pruža jednostavan način ubrizgavanja ovisnosti u Java klase.

Ova je napomena vrlo korisna za ubrizgavanje sredstva, bloka, resursa i usluge.

5.2. @InjectPage

Dostupno u org.apache.tapiserija5.notacije paket, @InjectPage napomena nam omogućuje ubrizgavanje stranice u drugu komponentu. Također, ubrizgana stranica uvijek je svojstvo samo za čitanje.

5.3. @InjectComponent

Slično tome, @InjectComponent anotacija nam omogućuje ubrizgavanje komponente definirane u predlošku.

5.4. @Prijava

The @Prijava napomena je dostupna u org.apache.tapiserija5.notacije paket i zgodan je da omogući prijavu na razini DEBUG na bilo kojoj metodi. Zapisuje ulaz i izlaz metode, zajedno s vrijednostima parametara.

5.5. @ Vlasništvo

Dostupno u org.apache.tapiserija5.notacije paket, @ Vlasništvo napomena označava polje kao svojstvo. Istodobno automatski stvara getere i postavljače za svojstvo.

5.6. @Parametar

Slično tome, @Parametar napomena označava da je polje parametar komponente.

6. Stranica

Dakle, svi smo spremni istražiti osnovne značajke okvira. Stvorimo novu Dom stranicu u našoj aplikaciji.

Prvo ćemo definirati Java klasu Dom u stranice imenik u src / main / java:

javni razred {}

6.1. Predložak

Zatim ćemo stvoriti odgovarajući Početna.tml predložak u stranice imenik pod src / glavni / resursi.

Datoteka s nastavkom .tml (Tapestry Markup Language) sličan je HTML / XHTML datoteci s XML oznakom koju pruža Apache Tapestry.

Na primjer, pogledajmo Početna.tml predložak:

  apache-tapiserija Dom 

Voila! Jednostavnim ponovnim pokretanjem poslužitelja Jetty možemo pristupiti Dom stranica na localhost: 8080 / apache-tapiserija / dom:

6.2. Vlasništvo

Istražimo kako prikazati svojstvo na Dom stranica.

Za ovo ćemo dodati svojstvo i getter metodu u Dom razred:

@Property private String appName = "apache-tapiserija"; javni datum getCurrentTime () {vrati novi datum (); }

Za prikaz appName nekretnina na Dom stranicu, možemo jednostavno koristiti $ {appName}.

Slično tome, možemo pisati $ {currentTime} za pristup getCurrentTime metoda sa stranice.

6.3. Lokalizacija

Apache Tapestry pruža integriranu podršku za lokalizaciju. Prema konvenciji, datoteka svojstva naziva stranice čuva popis svih lokalnih poruka koje se na stranici mogu prikazati.

Na primjer, stvorit ćemo kuće.svojstva datoteku u stranice imenik za Dom stranica s lokalnom porukom:

introMsg = Dobro došli u Vodič za tapiserije Apache

Svojstva poruke razlikuju se od Java svojstava.

Iz istog razloga naziv ključa s poruka prefiks koristi se za prikazivanje svojstva poruke - na primjer, $ {message: introMsg}.

6.4. Komponenta izgleda

Definirajmo osnovnu komponentu izgleda stvaranjem Izgled.java razred. Datoteku ćemo zadržati u komponente imenik u src / main / java:

izgled javne klase {@Property @Parameter (obavezno = true, defaultPrefix = BindingConstants.LITERAL) private String title; }

Evo, titula svojstvo je označeno kao obavezno, a zadani je prefiks za povezivanje postavljen kao doslovni Niz.

Zatim ćemo napisati odgovarajuću datoteku predloška Layout.tml u komponente imenik u src / glavni / resursi:

  $ {title} 

© Vaša tvrtka

Sada, upotrijebimo raspored na Dom stranica:

$ {message: introMsg}

$ {currentTime}

Napomena, prostor imena koristi se za identificiranje elemenata (t: tip i t: tijelo) pruža Apache Tapiserija. Istodobno, prostor imena također nudi komponente i atribute.

Evo, t: tip postavit će raspored na Dom stranica. I, t: tijelo element umetnut će sadržaj stranice.

Pogledajmo Dom stranica s izgledom:

7. Obrazac

Stvorimo a Prijaviti se stranicu s obrascem, kako bi se korisnicima omogućila prijava.

Kao što je već istraženo, prvo ćemo stvoriti Java klasu Prijaviti se:

prijava javne klase {// ... @InjectComponent privatni obrazac prijava; @Property private String e-mail; Lozinka privatnog niza @Property; }

Ovdje smo definirali dva svojstva - e-mail i zaporka. Također smo ubrizgali a Oblik komponenta za prijavu.

Zatim, kreirajmo odgovarajući predložak login.tml:

Molim, potpišite

Sada možemo pristupiti prijaviti se stranica na localhost: 8080 / apache-tapiserija / prijava:

8. Provjera valjanosti

Apache Tapiserija nudi nekoliko ugrađenih metoda za provjeru valjanosti obrazaca. Također pruža načine za rješavanje uspjeha ili neuspjeha predaje obrasca.

Ugrađena metoda slijedi konvenciju događaja i naziv komponente. Na primjer, metoda onValidationFromLogin potvrdit će Prijaviti se komponenta.

Isto tako, metode poput onSuccessFromLogin i onFailureFromLogin su za uspjeh, odnosno neuspjeh.

Dakle, dodajmo ove ugrađene metode u Prijaviti se razred:

javna klasa Login {// ... void onValidateFromLogin () {if (email == null) System.out.println ("Email is null); if (password == null) System.out.println (" Password is null ); } Objekt onSuccessFromLogin () {System.out.println ("Dobrodošli! Uspješna prijava"); povratak kući.klasa; } void onFailureFromLogin () {System.out.println ("Molimo pokušajte ponovo s ispravnim vjerodajnicama"); }}

9. Upozorenja

Provjera obrasca je nepotpuna bez odgovarajućih upozorenja. Da ne spominjem, okvir također ima ugrađenu podršku za poruke upozorenja.

Zbog toga ćemo prvo ubrizgati instancu AlertManager u Prijaviti se razred za upravljanje upozorenjima. Zatim zamijenite println izjave u postojećim metodama s porukama upozorenja:

prijava za javni razred {// ... @Inject private AlertManager alertManager; void onValidateFromLogin () {if (email == null || lozinka == null) {alertManager.error ("Email / Password je null"); login.recordError ("Provjera nije uspjela"); // neuspjeh predaje na obrascu}} Objekt onSuccessFromLogin () {alertManager.success ("Dobrodošli! Prijava uspješna"); povratak kući.klasa; } void onFailureFromLogin () {alertManager.error ("Molimo pokušajte ponovo s ispravnim vjerodajnicama"); }}

Pogledajmo upozorenja na djelu kada prijava ne uspije:

10. Ajax

Do sada smo istražili stvaranje jednostavnog Dom stranica s obrascem. Istodobno smo vidjeli provjere valjanosti i podršku za poruke upozorenja.

Dalje, istražimo ugrađenu podršku Ajachevog tapiserija za Ajax.

Prvo ćemo ubrizgati instancu AjaxResponseRenderer i Blok komponenta u Dom razred. Zatim ćemo stvoriti metodu onCallAjax za obradu poziva Ajaxa:

javna klasa Početna {// .... @Inject private AjaxResponseRenderer ajaxResponseRenderer; @Ubrizgajte privatni blok ajaxBlock; @Prijava nevažeća naCallAjax () {ajaxResponseRenderer.addRender ("ajaxZone", ajaxBlock); }}

Također, moramo napraviti nekoliko promjena u našem Početna.tml.

Prvo ćemo dodati eventLink pozivati ​​se na onCallAjax metoda. Zatim ćemo dodati a zona element s id ajaxZone da pruži odgovor Ajaxa.

Na kraju, moramo imati blok komponentu koja će se ubrizgati u Dom klase i prikazano kao Ajaxov odgovor:

Nazovite Ajax


Prikazano kroz Ajax

Trenutno vrijeme je: $ {currentTime}

Pogledajmo ažurirano Dom stranica:

Zatim možemo kliknuti gumb Pozovi Ajax i vidjeti ajaxResponseRenderer u akciji:

11. Sječa drva

Da biste omogućili ugrađenu značajku zapisivanja, instanca Drvosječa je potrebno ubrizgati. Zatim ga možemo koristiti za bilježenje na bilo kojoj razini poput TRACE, DEBUG i INFO.

Dakle, napravimo potrebne promjene u Dom razred:

javna klasa Početna {// ... @Inject private Logger logger; void onCallAjax () {logger.info ("Ajaxov poziv"); ajaxResponseRenderer.addRender ("ajaxZone", ajaxBlock); }}

Sada, kada kliknemo gumb Call Ajax, pojavit će se drvosječa prijavit će se na razini INFO:

Stranice [INFO]. Kućni poziv Ajaxa 

12. Zaključak

U ovom smo članku istražili mrežni okvir Apache Tapestry.

Za početak smo izradili brzu web aplikaciju i dodali a Dom stranica koja koristi osnovne značajke Apache Tapiserije, poput komponente, stranice, i predlošci.

Zatim smo pregledali nekoliko korisnih napomena koje nudi Apache Tapestry za konfiguriranje svojstva i ubrizgavanja komponenata / stranica.

Na kraju, istražili smo ugrađeni Ajax i podršku za evidentiranje koje pruža okvir.

Kao i obično, sve implementacije koda dostupne su na GitHubu.