Šablóna s riadidlami

1. Prehľad

V tomto tutoriále sa pozrieme do knižnice Handlebars.java, ktorá nám uľahčí správu šablón.

2. Maven závislosti

Začnime pridaním riadidlá závislosť:

 riadidlá com.github.jknack 4.1.2 

3. Jednoduchá šablóna

Šablóna Riadidlá môže byť akýkoľvek druh textového súboru. Pozostáva zo značiek ako {{name}} a {{#each people}}.

Potom tieto značky vyplníme odovzdaním kontextového objektu, napríklad a Mapa alebo iný Objekt.

3.1. Použitím toto

Aby prešiel jeden String hodnotu pre našu šablónu, môžeme použiť ľubovoľnú Objekt ako kontext. Musíme tiež použiťtoto}} tag v našej šablóne.

Potom riadidlá zavolá natiahnuť metóda na kontextovom objekte a značku nahradí výsledkom:

@Test public void whenThereIsNoTemplateFile_ThenCompilesInline () vyvolá IOException {riadidlá riadidlá = nové riadidlá (); Template template = handlebars.compileInline ("Ahoj {{this}}!"); Reťazec templateString = template.apply ("Baeldung"); assertThat (templateString) .isEqualTo ("Ahoj Baeldung!"); }

Vo vyššie uvedenom príklade najskôr vytvoríme inštanciu Riadidlá, náš vstupný bod API.

Potom dáme tejto inštancii našu šablónu. Tu, len odovzdáme šablónu inline, ale o chvíľu uvidíme nejaké výkonnejšie spôsoby.

Nakoniec dáme zostavenej šablóne náš kontext. {{this}} sa práve končí volanie natiahnuť, čo je dôvod, prečo vidíme "Ahoj Baeldung!".

3.2. Absolvovanie a Mapa ako kontextový objekt

Práve sme videli, ako poslať a String pre náš kontext teraz skúsme a Mapa:

@ Test public void whenParameterMapIsSupplied_thenDisplays () vyvolá IOException {Riadidlá riadidlá = nové Riadidlá (); Template template = handlebars.compileInline ("Ahoj {{name}}!"); Parameter mapMap = new HashMap (); parameterMap.put ("name", "Baeldung"); Reťazec templateString = template.apply (parameterMap); assertThat (templateString) .isEqualTo ("Ahoj Baeldung!"); }

Podobne ako v predchádzajúcom príklade, zostavujeme našu šablónu a potom odovzdávame kontextový objekt, ale tentokrát ako a Mapa.

Všimnite si tiež, že používame {{názov}} namiesto {{this}}. To znamená, že naša mapa musí obsahovať kľúč, názov.

3.3. Odovzdanie vlastného objektu ako kontextového objektu

Do našej šablóny môžeme tiež vložiť vlastný objekt:

public class Osoba {private String name; súkromný boolean zaneprázdnený; adresa súkromnej adresy = nová adresa (); private List friends = new ArrayList (); verejná statická trieda Adresa {private String street; }}

Pomocou Osoba triedy, dosiahneme rovnaký výsledok ako v predchádzajúcom príklade:

@Test public void whenParameterObjectIsSupplied_ThenDisplays () vyvolá IOException {riadidlá riadidlá = nové riadidlá (); Template template = handlebars.compileInline ("Ahoj {{name}}!"); Osoba osoba = nová Osoba (); person.setName ("Baeldung"); Reťazec templateString = template.apply (osoba); assertThat (templateString) .isEqualTo ("Ahoj Baeldung!"); }

{{názov}} v našej šablóne vŕtame do našej Osoba objekt a získať hodnotu názov lúka.

4. Načítavače šablón

Doteraz sme používali šablóny, ktoré sú definované vo vnútri kódu. Nie je to však jediná možnosť. Môžeme tiež čítať šablóny z textových súborov.

Handlebars.java poskytuje špeciálnu podporu pre čítanie šablón z kontextu triedy, súborového systému alebo servletu. Predvolene riadidlá skenujú cestu k triede, aby načítali danú šablónu:

@Test public void whenNoLoaderIsGiven_ThenSearchesClasspath () vyvolá IOException {riadidlá riadidlá = nové riadidlá (); Šablóna template = handlebars.compile ("pozdrav"); Osoba osoba = getPerson ("Baeldung"); Reťazec templateString = template.apply (osoba); assertThat (templateString) .isEqualTo ("Ahoj Baeldung!"); }

Takže, pretože sme volali zostaviť namiesto compileInline, toto je náznak, ktorý majú riadidlá hľadať /greeting.hbs na triednej ceste.

Tieto vlastnosti však môžeme nakonfigurovať aj pomocou ClassPathTemplateLoader:

@Test public void whenClasspathTemplateLoaderIsGiven_ThenSearchesClasspathWithPrefixSuffix () vyvolá IOException {TemplateLoader loader = new ClassPathTemplateLoader ("/ handlebars", ".html"); Riadidlá riadidlá = nové Riadidlá (nakladač); Šablóna template = handlebars.compile ("pozdrav"); // ... rovnaké ako predtým }

V tomto prípade hovoríme Riadidlá hľadať /handlebars/greeting.html na triednej ceste.

Nakoniec môžeme pripútať viac TemplateLoader prípady:

@Test public void whenMultipleLoadersAreGiven_ThenSearchesSequentially () hodí IOException {TemplateLoader firstLoader = new ClassPathTemplateLoader ("/ handlebars", ".html"); TemplateLoader secondLoader = new ClassPathTemplateLoader ("/ templates", ".html"); Riadidlá riadidlá = nové Riadidlá (). S (firstLoader, secondLoader); // ... rovnaké ako predtým }

Takže tu máme dva nakladače, čo znamená, že riadidlá prehľadajú dva adresáre pozdrav šablóna.

5. Vstavaní pomocníci

Vstavaní pomocníci nám poskytujú ďalšie funkcie pri písaní našich šablón.

5.1. s Pomocník

The s pomocník zmení aktuálny kontext:

{{#s adresou}} 

Bývam na {{street}}

{{/ s}}

V našej vzorovej šablóne {{#s adresou}} značka spustí sekciu a {{/ s}} značka to končí.

V podstate sa vŕtame do aktuálneho kontextového objektu - povedzme serson - a nastavenie adresa ako miestny kontext pre s oddiel. Potom bude každý odkaz na pole v tejto časti doplnený o osoba.adresa.

Takže {{ulica}} značka bude obsahovať hodnotu osoba.adresa.ulica:

@Test public void whenUsedWith_ThenContextChanges () hodí IOException {riadidlá riadidlá = nové riadidlá (templateLoader); Template template = handlebars.compile ("with"); Osoba osoba = getPerson ("Baeldung"); person.getAddress (). setStreet ("svet"); Reťazec templateString = template.apply (osoba); assertThat (templateString) .contains ("

Žijem vo svete

"); }

Zostavujeme našu šablónu a priraďujeme a Osoba inštancia ako kontextový objekt. Všimnite si, že Osoba trieda má Adresa lúka. Toto je pole, do ktorého dodávame s pomocník.

Aj keď sme do nášho kontextového objektu prešli o jednu úroveň, je úplne v poriadku ísť hlbšie, ak má kontextový objekt niekoľko vnorených úrovní.

5.2. každý Pomocník

The každý pomocník iteruje nad zbierkou:

{{# # friends friends}} {{name}} je môj priateľ. {{/ each}}

V dôsledku spustenia a zatvorenia iteračnej časti pomocou {{#each friends}} a {{/ each}} štítky, riadidlá budú iterovať nad priatelia pole kontextového objektu.

@Test public void whenUsedEach_ThenIterates () hodí IOException {riadidlá riadidlá = nové riadidlá (templateLoader); Template template = handlebars.compile ("each"); Osoba osoba = getPerson ("Baeldung"); Osoba friend1 = getPerson ("Java"); Osoba friend2 = getPerson ("Jar"); person.getFriends (). add (friend1); person.getFriends (). add (friend2); Reťazec templateString = template.apply (osoba); assertThat (templateString) .obsahuje ("Java je môj priateľ.", "Jar je môj priateľ."); }

V príklade priradíme dva Osoba inštancie do priatelia pole kontextového objektu. Handlebars teda v konečnom výstupe dvakrát zopakuje časť HTML.

5.3. ak Pomocník

Nakoniec the ak pomocník poskytuje podmienené vykreslenie.

{{#if zaneprázdnený}} 

{{name}} je zaneprázdnený.

{{else}}

{{name}} nie je zaneprázdnený.

{{/ if}}

V našej šablóne poskytujeme rôzne správy podľa zaneprázdnený lúka.

@Test public void whenUsedIf_ThenPutsCondition () vyvolá IOException {riadidlá riadidlá = nové riadidlá (templateLoader); Template template = handlebars.compile ("if"); Osoba osoba = getPerson ("Baeldung"); person.setBusy (true); Reťazec templateString = template.apply (osoba); assertThat (templateString) .contains ("

Baeldung je zaneprázdnený.

"); }

Po zostavení šablóny nastavujeme kontextový objekt. Keďže zaneprázdnený pole je pravda, stane sa konečný výstup

Baeldung je zaneprázdnený.

.

6. Pomocníci vlastných šablón

Môžeme si tiež vytvoriť vlastných pomocníkov.

6.1. Pomocník

The Pomocník rozhranie nám umožňuje vytvoriť pomocníka šablón.

Ako prvý krok musíme zabezpečiť implementáciu Pomocník:

new Helper () {@Override public Object apply (Person context, Options options) throws IOException {String busyString = context.isBusy ()? "busy": "available"; return context.getName () + "-" + busyString; }}

Ako vidíme, Pomocník rozhranie má iba jednu metódu, ktorá akceptuje kontext a možnosti predmety. Pre naše účely poskytneme výstup názov a zaneprázdnený polia Osoba.

Po vytvorení pomocníka musíme tiež zaregistrovať nášho vlastného pomocníka na riadidlách:

@Test public void whenHelperIsCreated_ThenCanRegister () hodí IOException {riadidlá riadidlá = nové riadidlá (templateLoader); handlebars.registerHelper ("isBusy", new Helper () {@Override public Object apply (Person context, Options options) throws IOException {String busyString = context.isBusy ()? "busy": "available"; return context.getName ( ) + "-" + busyString;}}); // podrobnosti implementácie}

V našom príklade registrujeme nášho pomocníka pod menom je zaneprázdnený pomocou Handlebars.registerHelper () metóda.

Ako posledný krok musíme v našej šablóne definovať značku pomocou mena pomocníka:

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

Všimnite si, že každý pomocník má začiatočnú a koncovú značku.

6.2. Pomocné metódy

Keď použijeme Pomocník môžeme vytvoriť iba jedného pomocníka. Naproti tomu trieda zdroja pomocníka nám umožňuje definovať viacerých pomocníkov šablón.

Navyše nemusíme implementovať žiadne konkrétne rozhranie. Naše pomocné metódy napíšeme iba v triede, potom HandleBars extrahuje definície pomocných látok pomocou odrazu:

verejná trieda HelperSource {verejný reťazec isBusy (kontext osoby) {reťazec busyString = kontext.isBusy ()? "busy": "available"; return context.getName () + "-" + busyString; } // Ďalšie pomocné metódy}

Pretože zdroj pomocníka môže obsahovať viac implementácií pomocníka, registrácia sa líši od registrácie jediného pomocníka:

@Test public void whenHelperSourceIsCreated_ThenCanRegister () hodí IOException {riadidlá riadidlá = nové riadidlá (templateLoader); handlebars.registerHelpers (new HelperSource ()); // Podrobnosti implementácie}

Registrujeme našich pomocníkov pomocou Handlebars.registerHelpers () metóda. Navyše, názov pomocnej metódy sa stáva názvom pomocnej značky.

7. Opätovné použitie šablóny

Knižnica Handlebars poskytuje niekoľko spôsobov, ako znovu použiť naše existujúce šablóny.

7.1. Zahrnutie šablóny

Zahrnutie šablóny je jedným z prístupov k opakovanému použitiu šablón. Uprednostňuje zloženie šablón.

Ahoj, {{name}}!

Toto je obsah hlavička šablóna - header.html.

Aby sme ho mohli použiť v inej šablóne, musíme odkazovať na hlavička šablóna.

{{> hlavička}} 

Toto je stránka {{name}}

Máme stránke šablóna - page.html - ktorá zahŕňa hlavička šablónu pomocou {{> hlavička}}.

Keď Handlebars.java spracuje šablónu, konečný výstup bude obsahovať aj obsah hlavička:

@Test public void whenOtherTemplateIsReferenced_ThenCanReuse () hodí IOException {riadidlá riadidlá = nové riadidlá (templateLoader); Šablóna template = handlebars.compile ("stránka"); Osoba osoba = nová Osoba (); person.setName ("Baeldung"); Reťazec templateString = template.apply (osoba); assertThat (templateString) .contains ("

Ahoj Baeldung!

", "

Toto je stránka Baeldung

"); }

7.2. Dedenie šablón

Alternatívne k zloženiu, Riadidlá poskytujú dedičstvo šablón.

Dedičské vzťahy môžeme dosiahnuť pomocou {{#block}} a {{#partial}} tagy:

  {{#block "intro"}} Toto je úvodná {{/ block}} {{#block "správa"}} {{/ block}} 

Týmto spôsobom základňa správ šablóna má dva bloky - úvod a správa.

Ak chcete použiť dedičstvo, musíme ich prepísať blokov v iných šablónach pomocou {{#partial}}:

{{#partial "message"}} Ahoj! {{/ partial}} {{> messagebase}}

To je jednoduchá správa šablóna. Všimnite si, že zahrňujeme aj základňa správ šablónu a tiež prvoradé správa blokovať.

8. Zhrnutie

V tomto tutoriáli sme sa pozreli na Handlebars.java na vytváranie a správu šablón.

Začali sme základným používaním značiek a potom sme sa pozreli na rôzne možnosti načítania šablón riadidiel.

Preskúmali sme tiež pomocníkov so šablónami, ktorí poskytujú veľkú funkčnosť. Na záver sme sa pozreli na rôzne spôsoby opätovného použitia našich šablón.

Na záver si pozrite zdrojový kód, kde nájdete všetky príklady na GitHub.


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