Introduktion til Apache Tapestry

1. Oversigt

I dag, fra sociale netværk til bank, sundhedspleje til offentlige tjenester, er alle aktiviteter tilgængelige online. Derfor er de stærkt afhængige af webapplikationer.

En webapplikation giver brugerne mulighed for at forbruge / nyde de onlinetjenester, der leveres af en virksomhed. Samtidig fungerer det som en grænseflade til backend-softwaren.

I denne introduktionsvejledning udforsker vi Apache Tapestry-webrammen og opretter en simpel webapplikation ved hjælp af de grundlæggende funktioner, den giver.

2. Apache-tapet

Apache Tapestry er en komponentbaseret ramme til opbygning af skalerbare webapplikationer.

Det følger konvention-over-konfiguration paradigme og bruger annoteringer og navngivningskonventioner til konfigurationer.

Alle komponenter er enkle POJO'er. Samtidig er de udviklet fra bunden og har ingen afhængighed af andre biblioteker.

Sammen med Ajax-support har Tapestry også store undtagelsesrapporteringsfunktioner. Det giver også et omfattende bibliotek med indbyggede fælles komponenter.

Blandt andre gode funktioner er en fremtrædende den varme genindlæsning af koden. Derfor kan vi ved hjælp af denne funktion se ændringerne med det samme i udviklingsmiljøet.

3. Opsætning

Apache Tapestry kræver et simpelt sæt værktøjer til at oprette en webapplikation:

  • Java 1.6 eller nyere
  • Bygningsværktøj (Maven eller Gradle)
  • IDE (Eclipse eller IntelliJ)
  • Applikationsserver (Tomcat eller Jetty)

I denne vejledning bruger vi kombinationen af ​​Java 8, Maven, Eclipse og Jetty Server.

For at oprette det nyeste Apache Tapestry-projekt bruger vi Maven-arketypen og følger instruktionerne i den officielle dokumentation:

$ mvn arketype: generer -DarchetypeCatalog = // tapestry.apache.org

Eller hvis vi har et eksisterende projekt, kan vi blot tilføje Maven-afhængighed til gobelin til pom.xml:

 org.apache.tapestry tapetry-core 5.4.5 

Når vi er klar med opsætningen, kan vi starte applikationen apache-tapet ved hjælp af følgende Maven-kommando:

$ mvn anløbsbro: kør

Som standard er appen tilgængelig på localhost: 8080 / apache-tapestry:

4. Projektstruktur

Lad os undersøge projektlayoutet oprettet af Apache Tapestry:

Vi kan se en Maven-lignende projektstruktur sammen med et par pakker baseret på konventioner.

Java-klasser er placeret i src / main / java og kategoriseret som komponenter, siderog tjenester.

Ligeledes, src / main / ressourcer hold vores skabeloner (svarende til HTML-filer) - disse har .tml udvidelse.

For hver Java-klasse placeret under komponenter og sider mapper, skal der oprettes en skabelonfil med samme navn.

Det src / main / webapp bibliotek indeholder ressourcer som billeder, typografiark og JavaScript-filer. På samme måde placeres testfiler i src / test.

Sidst, src / site indeholder dokumentationsfilerne.

For en bedre idé, lad os se på projektstrukturen, der er åbnet i Eclipse IDE:

5. Kommentarer

Lad os diskutere et par praktiske kommentarer, der leveres af Apache Tapestry til daglig brug. Fremadrettet bruger vi disse kommentarer i vores implementeringer.

5.1. @Indsprøjte

Det @Indsprøjte kommentar er tilgængelig i org.apache.tapestry5.ioc.annotationer pakke og giver en nem måde at indsætte afhængigheder i Java-klasser på.

Denne kommentar er ret praktisk at indsprøjte et aktiv, en blok, en ressource og en tjeneste.

5.2. @InjectPage

Fås i org.apache.tapestry5.annotationer pakke, den @InjectPage annotering giver os mulighed for at indsprøjte en side i en anden komponent. Den indsprøjtede side er også altid en skrivebeskyttet egenskab.

5.3. @InjectComponent

Tilsvarende er @InjectComponent annotation giver os mulighed for at indsprøjte en komponent, der er defineret i skabelonen.

5.4. @Log

Det @Log kommentar er tilgængelig i org.apache.tapestry5.annotationer pakke og er praktisk at aktivere DEBUG-logning på enhver metode. Det logger metodeindgang og -udgang sammen med parameterværdier.

5.5. @Ejendom

Fås i org.apache.tapestry5.annotationer pakke, den @Ejendom kommentar markerer et felt som en egenskab. Samtidig opretter det automatisk getters og settere til ejendommen.

5.6. @Parameter

Tilsvarende er @Parameter annotation angiver, at et felt er en komponentparameter.

6. Side

Så vi er klar til at udforske de grundlæggende funktioner i rammen. Lad os oprette et nyt Hjem side i vores app.

Først definerer vi en Java-klasse Hjem i sider bibliotek i src / main / java:

offentlig klasse Hjem {}

6.1. Skabelon

Derefter opretter vi et tilsvarende Hjem.tml skabelon i sider bibliotek under src / main / ressourcer.

En fil med filtypen .tml (Tapestry Markup Language) svarer til en HTML / XHTML-fil med XML-markering leveret af Apache Tapestry.

Lad os for eksempel se på Hjem.tml skabelon:

  apache-tapestry Hjem 

Voila! Ved at genstarte Jetty-serveren kan vi få adgang til Hjem side kl localhost: 8080 / apache-tapestry / home:

6.2. Ejendom

Lad os undersøge, hvordan man gengiver en ejendom på Hjem side.

Til dette tilføjer vi en egenskab og en getter-metode i Hjem klasse:

@Property private String appName = "apache-tapestry"; offentlig dato getCurrentTime () {returner ny dato (); }

At gengive appnavn ejendom på Hjem side, kan vi simpelthen bruge $ {appName}.

På samme måde kan vi skrive $ {nuværende tid} for at få adgang til getCurrentTime metode fra siden.

6.3. Lokalisering

Apache Tapestry giver integreret lokaliseringsstøtte. Som pr. Konvention holder en egenskabsfil på sidenavn listen over alle de lokale meddelelser, der skal gengives på siden.

For eksempel opretter vi en hjem. ejendomme fil i sider bibliotek til Hjem side med en lokal besked:

introMsg = Velkommen til Apache Tapestry Tutorial

Beskedegenskaberne er forskellige fra Java-egenskaberne.

Af samme grund skal nøglenavnet med besked præfiks bruges til at gengive en meddelelsesegenskab - for eksempel $ {besked: introMsg}.

6.4. Layoutkomponent

Lad os definere en grundlæggende layoutkomponent ved at oprette Layout. Java klasse. Vi opbevarer filen i komponenter bibliotek i src / main / java:

public class Layout {@Property @Parameter (krævet = true, defaultPrefix = BindingConstants.LITERAL) privat streng titel; }

Her, den titel egenskab er markeret påkrævet, og standardpræfikset for binding er angivet som bogstaveligt Snor.

Derefter skriver vi en tilsvarende skabelonfil Layout.tml i komponenter bibliotek i src / main / ressourcer:

  $ {titel} 

© Dit firma

Lad os nu bruge layout på den hjem side:

$ {besked: introMsg}

$ {nuværende tid}

Bemærk, at navneområdet bruges til at identificere elementerne (t: type og t: krop) leveret af Apache Tapestry. Samtidig indeholder navneområdet også komponenter og attributter.

Her, den t: type vil indstille layout på den hjem side. Og t: krop element indsætter indholdet på siden.

Lad os se på Hjem side med layoutet:

7. Formular

Lad os oprette en Log på side med en formular, så brugerne kan logge ind.

Som allerede udforsket opretter vi først en Java-klasse Log på:

offentlig klasse Login {// ... @InjectComponent private Form login; @Property privat streng-mail; @Privat privat strengadgangskode; }

Her har vi defineret to egenskaber - e-mail og adgangskode. Vi har også injiceret en Form komponent til login.

Lad os derefter oprette en tilsvarende skabelon login.tml:

Log ind

Nu kan vi få adgang til Log på side kl localhost: 8080 / apache-tapestry / login:

8. Validering

Apache Tapestry giver et par indbyggede metoder til formularvalidering. Det giver også måder at håndtere succes eller fiasko ved indsendelse af formularen.

Den indbyggede metode følger begivenhedens konvention og komponentnavnet. For eksempel metoden onValidationFromLogin vil validere Log på komponent.

Ligeledes metoder som onSuccessFromLogin og onFailureFromLogin er til henholdsvis succes og fiasko.

Så lad os tilføje disse indbyggede metoder til Log på klasse:

offentlig klasse Login {// ... ugyldig onValidateFromLogin () {if (email == null) System.out.println ("Email er null); hvis (password == null) System.out.println (" Password er null ); } Objekt onSuccessFromLogin () {System.out.println ("Velkommen! Login lykkedes"); vende hjem.klasse; } ugyldigt onFailureFromLogin () {System.out.println ("Prøv igen med korrekte legitimationsoplysninger"); }}

9. Advarsler

Formularvalidering er ufuldstændig uden ordentlige advarsler. For ikke at nævne, rammen har også indbygget support til advarselsmeddelelser.

Til dette indsprøjter vi først forekomsten af AlertManager i Log på klasse til at styre alarmerne. Udskift derefter println udsagn i eksisterende metoder med advarselsmeddelelser:

offentlig klasse Login {// ... @Inject private AlertManager alertManager; ugyldigt onValidateFromLogin () {if (email == null || password == null) {alertManager.error ("Email / Password er null"); login.recordError ("Validering mislykkedes"); // indsendelsesfejl på formularen}} Objekt onSuccessFromLogin () {alarmManager.success ("Velkommen! Login lykkedes"); vende hjem.klasse; } ugyldigt onFailureFromLogin () {alertManager.error ("Prøv igen med korrekte legitimationsoplysninger"); }}

Lad os se advarslerne i aktion, når login mislykkes:

10. Ajax

Indtil videre har vi undersøgt oprettelsen af ​​en simpel hjem side med en formular. På samme tid har vi set valideringer og support til advarselsmeddelelser.

Lad os derefter udforske Apache Tapestrys indbyggede support til Ajax.

Først indsprøjter vi forekomsten af AjaxResponseRenderer og Blok komponent i Hjem klasse. Derefter opretter vi en metode onCallAjax til behandling af Ajax-opkaldet:

offentlig klasse Hjem {// .... @Inject private AjaxResponseRenderer ajaxResponseRenderer; @Injicér privat blok ajaxBlock; @Log ugyldigt onCallAjax () {ajaxResponseRenderer.addRender ("ajaxZone", ajaxBlock); }}

Vi er også nødt til at foretage et par ændringer i vores Hjem.tml.

Først tilføjer vi eventLink at påberåbe sig onCallAjax metode. Derefter tilføjer vi en zone element med id ajaxZone for at gengive Ajax-svaret.

Endelig skal vi have en blokkomponent, der injiceres i Hjem klasse og gengives som Ajax-svar:

Ring til Ajax


Gengivet gennem Ajax

Den aktuelle tid er: $ {nuværende tid}

Lad os se på det opdaterede hjem side:

Derefter kan vi klikke på knappen Call Ajax og se ajaxResponseRenderer i aktion:

11. Logning

For at aktivere den indbyggede logfunktion skal forekomsten af Logger skal injiceres. Derefter kan vi bruge det til at logge på ethvert niveau som TRACE, DEBUG og INFO.

Så lad os foretage de nødvendige ændringer i Hjem klasse:

offentlig klasse Hjem {// ... @Inject private Logger logger; ugyldigt onCallAjax () {logger.info ("Ajax call"); ajaxResponseRenderer.addRender ("ajaxZone", ajaxBlock); }}

Når vi nu klikker på knappen Call Ajax, vises logger logger på INFO-niveauet:

[INFO] -sider. Ajax-opkald til hjemmet 

12. Konklusion

I denne artikel har vi udforsket Apache Tapestry-webrammen.

Til at begynde med har vi oprettet en hurtigstart-webapplikation og tilføjet en Hjem side ved hjælp af grundlæggende funktioner i Apache Tapestry, ligesom komponenter, siderog skabeloner.

Derefter har vi undersøgt et par praktiske kommentarer, leveret af Apache Tapestry for at konfigurere en ejendom og komponent / sideinjektion.

Til sidst har vi udforsket den indbyggede Ajax og logging support, der leveres af rammen.

Som normalt er alle kodeimplementeringer tilgængelige på GitHub.


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