Introduksjon til Apache Tapestry

1. Oversikt

I dag, fra sosiale nettverk til bank, helsetjenester til offentlige tjenester, er alle aktiviteter tilgjengelige online. Derfor stoler de sterkt på webapplikasjoner.

En webapplikasjon gjør det mulig for brukere å konsumere / nyte de elektroniske tjenestene som tilbys av et selskap. Samtidig fungerer det som et grensesnitt til backend-programvaren.

I denne innledende opplæringen vil vi utforske Apache Tapestry web framework og lage en enkel webapplikasjon ved hjelp av de grunnleggende funksjonene den gir.

2. Apache Tapestry

Apache Tapestry er et komponentbasert rammeverk for å bygge skalerbare webapplikasjoner.

Den følger konvensjon-over-konfigurasjon paradigme og bruker merknader og navnekonvensjoner for konfigurasjoner.

Alle komponentene er enkle POJOer. Samtidig er de utviklet fra bunnen av og har ingen avhengigheter av andre biblioteker.

Sammen med Ajax-støtte, har Tapestry også gode rapporteringsfunksjoner for unntak. Det gir også et omfattende bibliotek med innebygde vanlige komponenter.

Blant andre flotte funksjoner er en fremtredende den varme omlastingen av koden. Derfor, ved å bruke denne funksjonen, kan vi se endringene umiddelbart i utviklingsmiljøet.

3. Oppsett

Apache Tapestry krever et enkelt sett med verktøy for å lage en webapplikasjon:

  • Java 1.6 eller nyere
  • Byggeverktøy (Maven eller Gradle)
  • IDE (formørkelse eller IntelliJ)
  • Applikasjonsserver (Tomcat eller brygge)

I denne opplæringen bruker vi kombinasjonen av Java 8, Maven, Eclipse og Jetty Server.

For å sette opp det siste Apache Tapestry-prosjektet, bruker vi Maven-arketypen og følger instruksjonene i den offisielle dokumentasjonen:

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

Eller hvis vi har et eksisterende prosjekt, kan vi ganske enkelt legge til Maven-avhengigheten til tapetkjerne i pom.xml:

 org.apache.tapestry tapetry-core 5.4.5 

Når vi er klare med oppsettet, kan vi starte applikasjonen apache-tapet av følgende Maven-kommando:

$ mvn brygge: løp

Som standard vil appen være tilgjengelig kl localhost: 8080 / apache-tapestry:

4. Prosjektstruktur

La oss utforske prosjektoppsettet opprettet av Apache Tapestry:

Vi kan se en Maven-lignende prosjektstruktur, sammen med noen få pakker basert på konvensjoner.

Java-klassene er plassert i src / main / java og kategorisert som komponenter, sider, og tjenester.

Like måte, src / main / resources ha malene våre (ligner på HTML-filer) - disse har .tml Utvidelse.

For hver Java-klasse plassert under komponenter og sider kataloger, bør det opprettes en malfil med samme navn.

De src / main / webapp katalog inneholder ressurser som bilder, stilark og JavaScript-filer. På samme måte plasseres testfiler i src / test.

Siste, src / nettsted vil inneholde dokumentasjonsfilene.

For en bedre ide, la oss ta en titt på prosjektstrukturen som ble åpnet i Eclipse IDE:

5. Kommentarer

La oss diskutere noen få praktiske merknader levert av Apache Tapestry for daglig bruk. Fremover bruker vi disse kommentarene i implementeringene våre.

5.1. @Injiser

De @Injiser kommentar er tilgjengelig i org.apache.tapestry5.ioc.annotasjoner pakken og gir en enkel måte å injisere avhengigheter i Java-klasser.

Denne kommentaren er ganske praktisk å injisere en eiendel, blokk, ressurs og tjeneste.

5.2. @InjectPage

Tilgjengelig i org.apache.tapestry5.annotasjoner pakken, den @InjectPage kommentar tillater oss å injisere en side i en annen komponent. Dessuten er den injiserte siden alltid en skrivebeskyttet eiendom.

5.3. @InjectComponent

Tilsvarende @InjectComponent kommentar lar oss injisere en komponent som er definert i malen.

5.4. @Logg

De @Logg kommentar er tilgjengelig i org.apache.tapestry5.annotasjoner pakke og er praktisk for å aktivere DEBUG-nivålogging på hvilken som helst metode. Den logger metodeinngang og utgang, sammen med parameterverdier.

5.5. @Eiendom

Tilgjengelig i org.apache.tapestry5.annotasjoner pakken, den @Eiendom merknad markerer et felt som en eiendom. Samtidig oppretter den automatisk getters og settere for eiendommen.

5.6. @Parameter

Tilsvarende @Parameter merknad angir at et felt er en komponentparameter.

6. Side

Så vi er klare til å utforske de grunnleggende funksjonene i rammeverket. La oss lage et nytt Hjem side i appen vår.

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

offentlig klasse Hjem {}

6.1. Mal

Deretter lager vi et tilsvarende Hjem.tml mal i sider katalog under src / main / resources.

En fil med filtypen .tml (Tapestry Markup Language) ligner på en HTML / XHTML-fil med XML-markering levert av Apache Tapestry.

La oss for eksempel se på Hjem.tml mal:

  apache-tapestry Hjem 

Voila! Bare ved å starte Jetty-serveren på nytt, får vi tilgang til Hjem side kl localhost: 8080 / apache-tapetry / home:

6.2. Eiendom

La oss undersøke hvordan du gjengir en eiendom på Hjem side.

For dette legger vi til en eiendom og en getter-metode i Hjem klasse:

@Property private String appName = "apache-tapestry"; public Date getCurrentTime () {return new Date (); }

Å gjengi appName eiendom på Hjem side, kan vi ganske enkelt bruke $ {appName}.

På samme måte kan vi skrive $ {currentTime} for å få tilgang til getCurrentTime metode fra siden.

6.3. Lokalisering

Apache Tapestry gir integrert lokaliseringsstøtte. I henhold til konvensjonen holder en sidenavnegenskapsfil listen over alle de lokale meldingene som skal gjengis på siden.

For eksempel vil vi lage en hjem. eiendommer filen i sider katalog for Hjem side med en lokal melding:

introMsg = Velkommen til Apache Tapestry Tutorial

Meldingsegenskapene er forskjellige fra Java-egenskapene.

Av samme grunn, nøkkelnavnet med beskjed prefikset brukes til å gjengi en meldingsegenskap - for eksempel $ {melding: introMsg}.

6.4. Oppsettkomponent

La oss definere en grunnleggende layoutkomponent ved å lage Layout.java klasse. Vi beholder filen i komponenter katalog i src / main / java:

public class Layout {@Property @Parameter (required = true, defaultPrefix = BindingConstants.LITERAL) private String title; }

Her, den tittel egenskapen er merket som obligatorisk, og standard prefikset for binding er satt som bokstavelig String.

Deretter skriver vi en tilsvarende malfil Layout.tml i komponenter katalog i src / main / resources:

  $ {title} 

© Din bedrift

La oss nå bruke oppsetthjem side:

$ {melding: introMsg}

$ {currentTime}

Merk at navneområdet brukes til å identifisere elementene (t: type og t: kropp) levert av Apache Tapestry. Samtidig inneholder navneområdet også komponenter og attributter.

Her, den t: type vil stille inn oppsetthjem side. Og t: kropp elementet vil sette inn innholdet på siden.

La oss ta en titt på Hjem side med oppsettet:

7. Skjema

La oss lage en Logg Inn side med skjema for å tillate brukere å logge på.

Som allerede utforsket, oppretter vi først en Java-klasse Logg Inn:

offentlig klasse Innlogging {// ... @InjectComponent private Form login; @Property private streng e-post; @Property private strengpassord; }

Her har vi definert to egenskaper - e-post og passord. Vi har også injisert en Skjema komponent for pålogging.

La oss deretter lage en tilsvarende mal login.tml:

Vennligst logg inn

Nå kan vi få tilgang til Logg Inn side kl localhost: 8080 / apache-tapestry / login:

8. Validering

Apache Tapestry tilbyr noen få innebygde metoder for skjemavalidering. Det gir også måter å håndtere suksessen eller mislykkingen av skjemainnleveringen.

Den innebygde metoden følger konvensjonen av hendelsen og komponentnavnet. For eksempel metoden onValidationFromLogin vil validere Logg Inn komponent.

Likeledes metoder som onSuccessFromLogin og onFailureFromLogin er henholdsvis for suksess og fiasko.

Så la oss legge til disse innebygde metodene til Logg Inn klasse:

offentlig klasse Innlogging {// ... ugyldig påValidateFromLogin () {if (email == null) System.out.println ("Email is null); if (password == null) System.out.println (" Password is null ); } Objekt onSuccessFromLogin () {System.out.println ("Velkommen! Pålogging vellykket"); returner Hjem.klasse; } ugyldig onFailureFromLogin () {System.out.println ("Prøv igjen med riktig legitimasjon"); }}

9. Varsler

Formvalidering er ufullstendig uten riktige varsler. For ikke å nevne, rammeverket har også innebygd støtte for varselmeldinger.

For dette vil vi først injisere forekomsten av AlertManager i Logg Inn klasse for å administrere varslene. Bytt deretter ut utskrift uttalelser i eksisterende metoder med varselmeldingene:

offentlig klasse Innlogging {// ... @Inject private AlertManager alertManager; ugyldig onValidateFromLogin () {if (email == null || passord == null) {alertManager.error ("E-post / passord er null"); login.recordError ("Validering mislyktes"); // innsendingsfeil på skjemaet}} Objekt onSuccessFromLogin () {alertManager.success ("Velkommen! Pålogging vellykket"); returner Hjem.klasse; } ugyldig onFailureFromLogin () {alertManager.error ("Prøv igjen med riktig legitimasjon"); }}

La oss se varslene i aksjon når påloggingen mislykkes:

10. Ajax

Så langt har vi utforsket etableringen av en enkel hjem side med skjema. Samtidig har vi sett valideringene og støtten for varselmeldinger.

La oss deretter utforske Apache Tapestrys innebygde støtte for Ajax.

Først injiserer vi forekomsten av AjaxResponseRenderer og Blokkere komponent i Hjem klasse. Deretter lager vi en metode onCallAjax for behandling av Ajax-samtalen:

offentlig klasse Hjem {// .... @Inject private AjaxResponseRenderer ajaxResponseRenderer; @Inject private Block ajaxBlock; @Log ugyldig onCallAjax () {ajaxResponseRenderer.addRender ("ajaxZone", ajaxBlock); }}

Vi må også gjøre noen endringer i vår Hjem.tml.

Først legger vi til eventLink å påkalle onCallAjax metode. Deretter legger vi til en sone element med id ajaxZone for å gjengi Ajax-responsen.

Til slutt må vi ha en blokkomponent som skal injiseres i Hjem klasse og gjengitt som Ajax-svar:

Ring Ajax


Gjengitt gjennom Ajax

Nåværende tid er: $ {currentTime}

La oss ta en titt på det oppdaterte hjem side:

Deretter kan vi klikke på Call Ajax-knappen og se ajaxResponseRenderer i aksjon:

11. Logging

For å aktivere den innebygde loggfunksjonen, forekomsten av Logger kreves for å bli injisert. Deretter kan vi bruke den til å logge på alle nivåer som TRACE, DEBUG og INFO.

Så la oss gjøre de nødvendige endringene i Hjem klasse:

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

Nå, når vi klikker på Ring Ajax-knappen, logger vil logge på INFO-nivå:

[INFO] -sider. Hjem Ajax-samtale 

12. Konklusjon

I denne artikkelen har vi utforsket Apache Tapestry web framework.

Til å begynne med har vi opprettet en hurtigstartapplikasjon og lagt til en Hjem side ved hjelp av grunnleggende funksjoner i Apache Tapestry, som komponenter, sider, og maler.

Deretter har vi undersøkt noen praktiske merknader levert av Apache Tapestry for å konfigurere en eiendom og komponent / sideinjeksjon.

Sist, har vi utforsket den innebygde Ajax- og loggstøtten som tilbys av rammeverket.

Som vanlig er alle kodeimplementeringene tilgjengelige på GitHub.