Inleiding tot Apache Tapestry

1. Overzicht

Tegenwoordig zijn alle activiteiten online beschikbaar, van sociale netwerken tot bankieren, van gezondheidszorg tot overheidsdiensten. Daarom zijn ze sterk afhankelijk van webapplicaties.

Een webapplicatie stelt gebruikers in staat om gebruik te maken van de online diensten die door een bedrijf worden aangeboden. Tegelijkertijd fungeert het als een interface naar de back-endsoftware.

In deze inleidende tutorial verkennen we het Apache Tapestry-webframework en maken we een eenvoudige webtoepassing met behulp van de basisfuncties die het biedt.

2. Apache Tapestry

Apache Tapestry is een op componenten gebaseerd raamwerk voor het bouwen van schaalbare webapplicaties.

Het volgt de conventie over configuratie paradigma en gebruikt annotaties en naamgevingsconventies voor configuraties.

Alle componenten zijn eenvoudige POJO's. Tegelijkertijd worden ze vanaf nul ontwikkeld en zijn ze niet afhankelijk van andere bibliotheken.

Naast Ajax-ondersteuning heeft Tapestry ook geweldige rapportagemogelijkheden voor uitzonderingen. Het biedt ook een uitgebreide bibliotheek met ingebouwde gemeenschappelijke componenten.

Een van de andere geweldige functies is het hete herladen van de code. Daarom kunnen we met behulp van deze functie de wijzigingen onmiddellijk in de ontwikkelomgeving zien.

3. Installatie

Apache Tapestry vereist een eenvoudige set tools om een ​​webtoepassing te maken:

  • Java 1.6 of hoger
  • Bouwtool (Maven of Gradle)
  • IDE (Eclipse of IntelliJ)
  • Toepassingsserver (Tomcat of Jetty)

In deze tutorial gebruiken we de combinatie van Java 8, Maven, Eclipse en Jetty Server.

Om het nieuwste Apache Tapestry-project op te zetten, gebruiken we het Maven-archetype en volgen we de instructies van de officiële documentatie:

$ mvn-archetype: genereer -DarchetypeCatalog = // tapestry.apache.org

Of, als we een bestaand project hebben, kunnen we eenvoudig de Maven-afhankelijkheid van de tapestry-core toevoegen aan het pom.xml:

 org.apache.tapestry tapijtkern 5.4.5 

Zodra we klaar zijn met de installatie, kunnen we de applicatie starten apache-tapestry door het volgende Maven-commando:

$ mvn steiger: rennen

Standaard is de app toegankelijk op localhost: 8080 / apache-tapestry:

4. Projectstructuur

Laten we de projectlay-out verkennen die is gemaakt door Apache Tapestry:

We kunnen een Maven-achtige projectstructuur zien, samen met een paar pakketten gebaseerd op conventies.

De Java-klassen worden geplaatst in src / main / java en gecategoriseerd als componenten, Pagina's, en Diensten.

Hetzelfde, src / main / resources houden onze sjablonen vast (vergelijkbaar met HTML-bestanden) - deze hebben de .tml uitbreiding.

Voor elke Java-klasse die onder componenten en Pagina's directories, moet een sjabloonbestand met dezelfde naam worden aangemaakt.

De src / main / webapp directory bevat bronnen zoals afbeeldingen, stylesheets en JavaScript-bestanden. Evenzo worden testbestanden in src / test.

Laatste, src / site bevat de documentatiebestanden.

Laten we voor een beter idee eens kijken naar de projectstructuur die is geopend in Eclipse IDE:

5. Annotaties

Laten we een paar handige annotaties bespreken die door Apache Tapestry worden geleverd voor dagelijks gebruik. In de toekomst zullen we deze annotaties gebruiken in onze implementaties.

5.1. @Injecteren

De @Injecteren annotatie is beschikbaar in de org.apache.tapestry5.ioc.annotaties pakket en biedt een gemakkelijke manier om afhankelijkheden in Java-klassen te injecteren.

Deze annotatie is best handig om een ​​asset, block, resource en service te injecteren.

5.2. @InjectPage

Verkrijgbaar in de org.apache.tapestry5.annotaties pakket, het @InjectPage annotatie stelt ons in staat om een ​​pagina in een andere component te injecteren. De geïnjecteerde pagina is ook altijd een alleen-lezen eigenschap.

5.3. @InjectComponent

Evenzo is het @InjectComponent annotatie stelt ons in staat om een ​​component te injecteren die in de sjabloon is gedefinieerd.

5.4. @Log

De @Log annotatie is beschikbaar in de org.apache.tapestry5.annotaties pakket en is handig om logboekregistratie op DEBUG-niveau op elke methode in te schakelen. Het registreert het invoeren en verlaten van de methode, samen met parameterwaarden.

5.5. @Eigendom

Verkrijgbaar in de org.apache.tapestry5.annotaties pakket, het @Eigendom annotatie markeert een veld als een eigenschap. Tegelijkertijd creëert het automatisch getters en setters voor het onroerend goed.

5.6. @Parameter

Evenzo is het @Parameter annotatie geeft aan dat een veld een componentparameter is.

6. Blz

Dus we zijn helemaal klaar om de basisfuncties van het framework te verkennen. Laten we een nieuw maken Huis pagina in onze app.

Eerst definiëren we een Java-klasse Huis in de Pagina's directory in src / main / java:

openbare les Home {}

6.1. Sjabloon

Vervolgens maken we een overeenkomstig Home.tml sjabloon in het Pagina's directory onder src / main / resources.

Een bestand met de extensie .tml (Tapestry Markup Language) is vergelijkbaar met een HTML / XHTML-bestand met XML-opmaak geleverd door Apache Tapestry.

Laten we bijvoorbeeld eens kijken naar de Home.tml sjabloon:

  apache-tapestry Home 

Voila! Door simpelweg de Jetty-server opnieuw op te starten, hebben we toegang tot het Huis pagina op localhost: 8080 / apache-tapestry / home:

6.2. Eigendom

Laten we eens kijken hoe we een eigenschap kunnen renderen op het Huis bladzijde.

Hiervoor voegen we een eigenschap en een getter-methode toe in de Huis klasse:

@Property private String appName = "apache-tapestry"; openbare datum getCurrentTime () {terugkeer nieuwe datum (); }

Om het applicatie naam eigendom op de Huis pagina, kunnen we gewoon gebruiken $ {appName}.

Evenzo kunnen we schrijven $ {currentTime} om toegang te krijgen tot het getCurrentTime methode van de pagina.

6.3. Lokalisatie

Apache Tapestry biedt geïntegreerde ondersteuning voor lokalisatie. Volgens afspraak houdt een eigenschappenbestand van een paginanaam de lijst bij van alle lokale berichten die op de pagina moeten worden weergegeven.

We maken bijvoorbeeld een home.properties bestand in het Pagina's directory voor de Huis pagina met een lokaal bericht:

introMsg = Welkom bij de Apache Tapestry Tutorial

De berichteigenschappen verschillen van de Java-eigenschappen.

Om dezelfde reden is de sleutelnaam met de bericht prefix wordt gebruikt om een ​​berichteigenschap weer te geven - bijvoorbeeld $ {bericht: introMsg}.

6.4. Lay-outcomponent

Laten we een basislay-outcomponent definiëren door de Layout.java klasse. We bewaren het bestand in het componenten directory in src / main / java:

openbare klasse Layout {@Property @Parameter (vereist = true, defaultPrefix = BindingConstants.LITERAL) private String-titel; }

Hier de titel eigenschap is gemarkeerd als vereist en het standaardvoorvoegsel voor binding is ingesteld als letterlijk Draad.

Vervolgens schrijven we een overeenkomstig sjabloonbestand Layout.tml in de componenten directory in src / main / resources:

  $ {title} 

© Uw bedrijf

Laten we nu de indeling op de huis bladzijde:

$ {bericht: introMsg}

$ {currentTime}

Let op, de naamruimte wordt gebruikt om de elementen (t: type en t: lichaam) geleverd door Apache Tapestry. Tegelijkertijd biedt de naamruimte ook componenten en attributen.

Hier de t: type zal de indeling op de huis bladzijde. En de t: lichaam element zal de inhoud van de pagina invoegen.

Laten we eens kijken naar de Huis pagina met de lay-out:

7. Vorm

Laten we een Log in pagina met een formulier, zodat gebruikers zich kunnen aanmelden.

Zoals al is onderzocht, maken we eerst een Java-klasse Log in:

openbare klasse Login {// ... @InjectComponent privé Formulier login; @Property private String e-mail; @Property privé String-wachtwoord; }

Hier hebben we twee eigenschappen gedefinieerd - e-mail en wachtwoord. We hebben ook een Het formulier component voor de login.

Laten we vervolgens een bijbehorend sjabloon maken login.tml:

Log in alstublieft

Nu hebben we toegang tot het Log in pagina op localhost: 8080 / apache-tapestry / login:

8. Validatie

Apache Tapestry biedt een aantal ingebouwde methoden voor formuliervalidatie. Het biedt ook manieren om het slagen of mislukken van de formulierinzending af te handelen.

De ingebouwde methode volgt de conventie van de gebeurtenis en de componentnaam. Bijvoorbeeld de methode onValidationFromLogin valideert het Log in component.

Evenzo methoden zoals onSuccessFromLogin en onFailureFromLogin zijn respectievelijk voor succes- en mislukkinggebeurtenissen.

Dus laten we deze ingebouwde methoden toevoegen aan het Log in klasse:

openbare klasse Login {// ... void onValidateFromLogin () {if (email == null) System.out.println ("E-mail is null); if (wachtwoord == null) System.out.println (" Wachtwoord is null ); } Object onSuccessFromLogin () {System.out.println ("Welkom! Inloggen succesvol"); terug naar Home.class; } void onFailureFromLogin () {System.out.println ("Probeer het opnieuw met de juiste inloggegevens"); }}

9. Waarschuwingen

Formuliervalidatie is onvolledig zonder de juiste waarschuwingen. Om nog maar te zwijgen, het framework heeft ook ingebouwde ondersteuning voor waarschuwingsberichten.

Hiervoor injecteren we eerst de instantie van de AlertManager in de Log in klasse om de waarschuwingen te beheren. Vervang vervolgens het println verklaringen in bestaande methoden met de waarschuwingsberichten:

openbare klasse Login {// ... @Inject privé AlertManager alertManager; void onValidateFromLogin () {if (email == null || wachtwoord == null) {alertManager.error ("E-mail / wachtwoord is null"); login.recordError ("Validatie mislukt"); // indieningsfout op het formulier}} Object onSuccessFromLogin () {alertManager.success ("Welkom! Inloggen succesvol"); terug naar Home.class; } void onFailureFromLogin () {alertManager.error ("Probeer het opnieuw met de juiste inloggegevens"); }}

Laten we de waarschuwingen in actie zien wanneer het inloggen mislukt:

10. Ajax

Tot nu toe hebben we de creatie van een simple huis pagina met een formulier. Tegelijkertijd hebben we de validaties en ondersteuning voor waarschuwingsberichten gezien.

Laten we vervolgens de ingebouwde ondersteuning van de Apache Tapestry voor Ajax bekijken.

Eerst injecteren we de instantie van de AjaxResponseRenderer en Blok component in de Huis klasse. Vervolgens maken we een methode onCallAjax voor het verwerken van de Ajax-oproep:

openbare klasse Home {// .... @Inject privé AjaxResponseRenderer ajaxResponseRenderer; @Inject privéblok ajaxBlock; @Log void onCallAjax () {ajaxResponseRenderer.addRender ("ajaxZone", ajaxBlock); }}

We moeten ook een paar wijzigingen aanbrengen in onze Home.tml.

Eerst voegen we de eventLink om het onCallAjax methode. Vervolgens voegen we een zone element met id ajaxZone om de Ajax-reactie weer te geven.

Als laatste hebben we een blokcomponent nodig die in het Huis klasse en weergegeven als Ajax-antwoord:

Bel Ajax


Weergegeven via Ajax

De huidige tijd is: $ {currentTime}

Laten we eens kijken naar de bijgewerkte huis bladzijde:

Vervolgens kunnen we op de knop Ajax bellen klikken en het ajaxResponseRenderer in actie:

11. Logboekregistratie

Om de ingebouwde logboekfunctie in te schakelen, moet de instantie van het Logger moet worden geïnjecteerd. Vervolgens kunnen we het gebruiken om in te loggen op elk niveau, zoals TRACE, DEBUG en INFO.

Laten we dus de vereiste wijzigingen aanbrengen in het Huis klasse:

openbare klasse Home {// ... @Inject private Logger-logger; void onCallAjax () {logger.info ("Ajax-oproep"); ajaxResponseRenderer.addRender ("ajaxZone", ajaxBlock); }}

Als we nu op de knop Ajax bellen klikken, wordt het logger logt in op het INFO-niveau:

[INFO] pagina's. Thuis Ajax bellen 

12. Conclusie

In dit artikel hebben we het webframework van Apache Tapestry verkend.

Om te beginnen hebben we een snelstartwebtoepassing gemaakt en een Huis pagina met basisfuncties van Apache Tapestry, zoals componenten, Pagina's, en Sjablonen.

Vervolgens hebben we enkele handige annotaties onderzocht die door Apache Tapestry worden geleverd om een ​​eigenschap en component / pagina-injectie te configureren.

Als laatste hebben we de ingebouwde ondersteuning voor Ajax en logboekregistratie door het framework onderzocht.

Zoals gewoonlijk zijn alle code-implementaties beschikbaar op GitHub.


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