Sablonozás kormányral

1. Áttekintés

Ebben az oktatóanyagban a Handlebars.java könyvtárba nézünk a sablonok egyszerű kezelése érdekében.

2. Maven-függőségek

Kezdjük a. Hozzáadásával kormány függőség:

 com.github.jknack kormány 4.1.2 

3. Egyszerű sablon

A kormány sablon bármilyen szöveges fájl lehet. Ilyen címkékből áll {{name}} és {{#eacheach}}.

Ezután kitöltjük ezeket a címkéket egy kontextus objektum átadásával, például a Térkép vagy más Tárgy.

3.1. Használata ez

Szingli átadásához Húr értéket a sablonunkhoz, bármelyiket használhatjuk Tárgy mint a kontextus. Használnunk kell a {{ez}} tag a sablonunkban.

Ezután a kormány meghívja a Sztring metódust a kontextus objektumon, és a címkét lecseréli az eredménnyel:

@Test public void whenThereIsNoTemplateFile_ThenCompilesInline () dobja az IOException-t {Kormány kormány = új Kormány (); Sablon sablon = handlebars.compileInline ("Szia {{this}}!"); String templateString = template.apply ("Baeldung"); assertThat (templateString) .isEqualTo ("Szia Baeldung!"); }

A fenti példában először létrehozunk egy példányt Kormány, az API belépési pontunk.

Ezután megadjuk annak a példánynak a sablonunkat. Itt, csak átadjuk a sablont sorban, de egy pillanat alatt meglátunk néhány erőteljesebb módszert.

Végül megadjuk az összeállított sablon kontextusát. {{ez}} csak a végén hív toString, ezért látjuk - Szia Baeldung!.

3.2. Átadás a Térkép kontextusobjektumként

Most láttuk, hogyan kell elküldeni a Húr kontextusunkhoz most próbálkozzunk a Térkép:

@Test public void whenParameterMapIsSupplied_thenDisplays () dobja az IOException-t {Kormány kormány = új Kormány (); Sablon sablon = handlebars.compileInline ("Szia {{név}}!"); Térkép paraméterMap = új HashMap (); paraméterMap.put ("név", "Baeldung"); String templateString = template.apply (paraméterMap); assertThat (templateString) .isEqualTo ("Szia Baeldung!"); }

Az előző példához hasonlóan összeállítjuk a sablonunkat, majd átadjuk a kontextus objektumot, de ezúttal a Térkép.

Figyelje meg azt is, hogy használjuk {{név}} ahelyett {{ez}}. Ez azt jelenti, hogy a térképünknek tartalmaznia kell a kulcsot, név.

3.3. Egyéni objektum átadása kontextusobjektumként

Egy egyedi objektumot is átadhatunk a sablonunknak:

public class Személy {private String név; privát logikai foglalt; privát cím címe = új cím (); privát Barátok listája = new ArrayList (); public static class Cím {private String street; }}

Használni a Személy osztályban ugyanazt az eredményt fogjuk elérni, mint az előző példa:

@Test public void whenParameterObjectIsSupplied_ThenDisplays () dobja az IOException {Kormány kormány = új Kormány (); Sablon sablon = handlebars.compileInline ("Szia {{név}}!"); Személy személy = új Személy (); person.setName ("Baeldung"); String templateString = template.apply (személy); assertThat (templateString) .isEqualTo ("Szia Baeldung!"); }

{{név}} sablonunkba fog fúrni a mi Személy objektumot és megkapja az név terület.

4. Sablonrakodók

Eddig a kódban definiált sablonokat használtunk. Ez azonban nem az egyetlen lehetőség. Azt is megtehetjük sablonok olvasása szöveges fájlokból.

A Handlebars.java speciális támogatást nyújt a sablonok elolvasásához az osztályút, fájlrendszer vagy szervlet kontextusból. Alapértelmezés szerint a Kormány a classpath-ot vizsgálja az adott sablon betöltéséhez:

@Test public void whenNoLoaderIsGiven_ThenSearchesClasspath () IOException dobja {Kormány kormány = új Kormány (); Sablon sablon = kormány.compile ("üdvözlet"); Személy személy = getPerson ("Baeldung"); String templateString = template.apply (személy); assertThat (templateString) .isEqualTo ("Szia Baeldung!"); }

Szóval, mert hívtunk összeállítani ahelyett compileInline, ez egy tipp a kormányra, amelyet keresni kell /greeting.hbs az osztályúton.

Ezeket a tulajdonságokat azonban a ClassPathTemplateLoader:

@Test public void whenClasspathTemplateLoaderIsGiven_ThenSearchesClasspathWithPrefixSuffix () IOException {TemplateLoader loader = új ClassPathTemplateLoader ("/ kormány", ".html") dobja; Kormány kormány = új kormány (rakodó); Sablon sablon = kormány.compile ("üdvözlet"); // ... ugyanaz, mint korábban}

Ebben az esetben elmondjuk Kormány keresni a /handlebars/greeting.html az osztályúton.

Végül többször is láncolhatunk TemplateLoader példányok:

@Test public void whenMultipleLoadersAreGiven_ThenSearchesSequential () dobja az IOException {TemplateLoader firstLoader = new ClassPathTemplateLoader ("/ kormány", ".html"); TemplateLoader secondLoader = új ClassPathTemplateLoader ("/ templates", ".html"); Kormány kormány = új Kormány (). With (firstLoader, secondLoader); // ... ugyanaz, mint korábban}

Tehát itt van két rakodónk, és ez azt jelenti, hogy a kormány két könyvtárat keres a üdvözlet sablon.

5. Beépített segítők

A beépített segítők további funkciókat biztosítanak nekünk a sablonjaink írásakor.

5.1. val vel Segítő

A val vel segítő megváltoztatja az aktuális kontextust:

{{# címmel}} 

Itt élek: {{street}}

{{/val vel}}

Mintasablonunkban a {{# címmel}} tag elindítja a szakaszt és a {{/val vel}} tag véget vet.

Lényegében az aktuális kontextusobjektumba fúródunk - mondjuk person - és beállítás cím mint a helyi kontextus a val vel szakasz. Ezt követően ebben a szakaszban minden mező referenciát előkészít személy.cím.

Így a {{utca}} tag meg fogja tartani az értékét személy.cím. utca:

@Test public void whenUsedWith_ThenContextChanges () dobja az IOException-t {Kormány kormány = új Kormány (templateLoader); Sablon sablon = kormány.compile ("with"); Személy személy = getPerson ("Baeldung"); person.getAddress (). setStreet ("Világ"); String templateString = template.apply (személy); assertThat (templateString) .contains ("

A Világban élek

"); }

Összeállítjuk a sablonunkat és hozzárendeljük a Személy példány, mint kontextus objektum. Figyeljük meg, hogy a Személy osztálynak van egy Cím terület. Ez az a terület, amelyet ellátunk val vel segítő.

Noha egy szintet mentünk a kontextusobjektumunkba, teljesen rendben van mélyebbre jutni, ha a kontextusobjektumnak több beágyazott szintje van.

5.2. minden egyes Segítő

A minden egyes segítő iterál egy gyűjtemény felett:

{{#eacheach friends}} {{name}} a barátom. {{/minden egyes}}

Az iterációs szakasz elindításának és lezárásának eredményeként {{# # barátok}} és {{/minden egyes}} címkék, a kormány iterálni fog a barátok a kontextus objektum mezője.

@Test public void whenUsedEach_ThenIterates () IOException dobja {Kormány kormány = új Kormány (templateLoader); Sablon sablon = kormány.compile ("mindegyik"); Személy személy = getPerson ("Baeldung"); Személy barát1 = getPerson ("Java"); Személy barát2 = getPerson ("Tavasz"); person.getFriends (). add (friend1); person.getFriends (). add (friend2); String templateString = template.apply (személy); assertThat (templateString) .contains ("Java a barátom.", "A tavasz a barátom."); }

A példában kettőt rendelünk hozzá Személy példányok a barátok a kontextus objektum mezője. Tehát a kormány a végső kimenetben kétszer megismétli a HTML részt.

5.3. ha Segítő

Végül, a ha helper biztosítja a feltételes megjelenítést.

{{# #if foglalt}} 

{{name}} foglalt.

{{más}}

{{name}} nincs elfoglalva.

{{/ha}}

Sablonunkban különböző üzeneteket adunk meg a elfoglalt terület.

@Test public void, amikorUUIdIf_ThenPutsCondition () dobja az IOException-t {kormány kormány = új kormány (templateLoader); Sablon sablon = kormány.compile ("ha"); Személy személy = getPerson ("Baeldung"); person.setBusy (true); String templateString = template.apply (személy); assertThat (templateString) .contains ("

Baeldung elfoglalt.

"); }

A sablon összeállítása után beállítjuk a kontextus objektumot. Mivel a elfoglalt mező az igaz, a végső kimenet lesz

Baeldung elfoglalt.

.

6. Egyéni sablonsegítők

Hozhatunk létre saját egyéni segítőket is.

6.1. Segítő

A Segítő felület lehetővé teszi számunkra, hogy sablon segítőt hozzunk létre.

Első lépésként biztosítanunk kell a Segítő:

új segítő () {@Orride public Object Apply (Személyi kontextus, Opciók beállításai) dobja az IOException {String busyString = context.isBusy ()? "foglalt": "elérhető"; return context.getName () + "-" + busyString; }}

Mint láthatjuk, a Segítő az interfésznek csak egy metódusa van, amely elfogadja a kontextus és opciók tárgyakat. Céljainkhoz kiadjuk a név és elfoglalt mezői Személy.

A segítő létrehozása után regisztrálnunk kell az egyedi segítőnket a kormányon is:

@Test public void whenHelperIsCreated_ThenCanRegister () IOException dobja {Kormány kormány = új Kormány (templateLoader); handlebars.registerHelper ("isBusy", new Helper () {@ Nyilvános objektum felülírása érvényes (Személyi kontextus, Beállítások opciók) az IOException-t dobja {String busyString = context.isBusy ()? "foglalt": "elérhető"; adja vissza context.getName ( ) + "-" + foglaltString;}}); // megvalósítás részletei}

Példánkban segítőnket regisztráljuk elfoglalt használni a Kormány.registerHelper () módszer.

Utolsó lépésként meg kell határoznunk egy címkét a sablonban a segítő nevével:

{{{#isBusy this}} {{/ isBusy}}

Figyelje meg, hogy minden segítőnek van kezdő és befejező címkéje.

6.2. Segítő módszerek

Amikor használjuk a Segítő felületen csak egy segítőt hozhatunk létre. Ezzel szemben egy segítő forrás osztály lehetővé teszi számunkra, hogy több sablon segítőt definiáljunk.

Sőt, nincs szükségünk semmilyen konkrét interfész megvalósítására. Csak egy osztályba írjuk a segítő módszereinket, majd a HandleBars reflexió segítségével kivonja a segítő definíciókat:

public class HelperSource {public String isBusy (Person context) {String busyString = context.isBusy ()? "foglalt": "elérhető"; return context.getName () + "-" + busyString; } // Egyéb segítő módszerek}

Mivel egy segítő forrás több segítő megvalósítást tartalmazhat, a regisztráció eltér az egyetlen segítő regisztrációtól:

@Test public void, amikorHelperSourceIsCreated_ThenCanRegister () dobja az IOException {Kormány kormány = új Kormány (templateLoader); kormány.registerHelpers (új HelperSource ()); // Megvalósítás részletei}

Segítőinket a Kormány.registerHelpers () módszer. Ráadásul, a segítő módszer neve lesz a segítő címke neve.

7. Sablon újrafelhasználása

A Kormány könyvtár számos módot kínál a meglévő sablonok újrafelhasználására.

7.1. Sablon felvétele

A sablonok felvétele az egyik megközelítés a sablonok újrafelhasználásához. Előnyben részesíti a sablonok összetételét.

Szia {{name}}!

Ez a tartalma fejléc sablon - header.html.

Ahhoz, hogy egy másik sablonban használhassuk, utalnunk kell a fejléc sablon.

{{> fejléc}} 

Ez a (z) {{name}} oldal

Megvan a oldalt sablon - page.html - amely magában foglalja a fejléc sablon segítségével {{> fejléc}}.

Amikor a Handlebars.java feldolgozza a sablont, a végső kimenet a fejléc:

@Test public void whenOtherTemplateIsReferenced_ThenCanReuse () dobja az IOException {Kormány kormány = új Kormány (templateLoader); Sablon sablon = kormány.compile ("oldal"); Személy személy = új Személy (); person.setName ("Baeldung"); String templateString = template.apply (személy); assertThat (templateString) .contains ("

Szia Baeldung!

", "

Ez az az oldal Baeldung

"); }

7.2. Sablon öröklés

A kompozíció helyett, A kormány biztosítja a sablonöröklést.

Az öröklési kapcsolatokat a {{#Blokk}} és {{#részleges}} címkék:

  {{#block "intro"}} Ez a bevezető {{/ block}} {{#block "üzenet"}} {{/ block}} 

Ezzel a üzenetbázis a sablonnak két blokkja van - bevezető és üzenet.

Az öröklés alkalmazásához felül kell írnunk ezeket blokkok más sablonokban a {{#részleges}}:

{{#partial "message"}} Sziasztok! {{/ partic}} {{> messagebase}}

Ez a egyszerű üzenet sablon. Figyelje meg, hogy a üzenetbázis sablont, és felülírja a üzenet Blokk.

8. Összefoglalás

Ebben az oktatóanyagban a Handlebars.java webhelyet néztük meg sablonok létrehozásához és kezeléséhez.

Az alapcímke használatával kezdtük, majd megvizsgáltuk a különböző lehetőségeket a kormány sablonok betöltésére.

Megvizsgáltuk a sablonsegítőket is, amelyek nagy funkcionalitást nyújtanak. Végül megvizsgáltuk a sablonok újrafelhasználásának különböző módjait.

Végül nézze meg a forráskódot a GitHub összes példájához.


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