Úvod do fúzov

1. Prehľad

V tomto článku sa zameriame na šablóny Mustache a na výrobu dynamického obsahu HTML použijeme jedno z jeho rozhraní Java API.

Fúzy sú a logický modul šablón na vytváranie dynamického obsahu ako napríklad HTML, konfiguračné súbory.

2. Úvod

Jednoducho povedané, motor je klasifikovaný ako bez logiky pretože nemá konštrukcie, ktoré podporujú príkazy if-else a pre slučky.

Šablóny Mustache pozostávajú z mien značiek obklopených { { } } (ktoré pripomínajú fúzy - odtiaľ názov) a sú podporené modelovým objektom obsahujúcim údaje pre šablónu.

3. Maven závislosť

Kompilácia a vykonávanie šablón sú podporované vo viacerých jazykoch - na strane klienta aj na strane servera.

Aby sme boli schopní spracovať šablóny z Javy, využívame jej knižnicu Java, ktorú je možné pridať ako závislosť Maven.

Java 8+:

 com.github.spullara.mustache.java kompilátor 0.9.4 

Java 6/7:

 com.github.spullara.mustache.java kompilátor 0.8.18 

Najnovšie verzie knižnice môžeme skontrolovať v centrálnom úložisku Maven.

4. Použitie

Pozrime sa na jednoduchý scenár, ktorý ukazuje, ako:

  1. Napíšte jednoduchú šablónu
  2. Zostavte šablónu pomocou rozhrania Java API
  3. Vykonajte to poskytnutím potrebných údajov

4.1. Jednoduchá šablóna na fúzy

Vytvoríme jednoduchú šablónu na zobrazenie podrobností úlohy todo:

{{title}}

Vytvorené {{createdOn}}

{{text}}

V šablóne vyššie môžu byť polia v zložených zátvorkách ({{}}):

  • metódy a vlastnosti triedy Java
  • kľúče a Mapa objekt

4.2. Kompilácia šablóny fúzy

Šablónu môžeme zostaviť, ako je uvedené nižšie:

MustacheFactory mf = new DefaultMustacheFactory (); Fúzy m = mf.compile ("todo.mustache"); 

MustacheFactory vyhľadá danú šablónu v triede. V našom príklade umiestnime todo.mustache pod src / main / resources.

4.3. Spustenie šablóny fúzy

Údaje poskytnuté do šablóny budú inštanciou Robiť trieda, ktorá je definíciou:

public class Todo {private String title; súkromný textový reťazec; súkromný boolean hotovo; súkromné ​​Dátum vytvorenia Zapnutý; súkromné ​​Dátum dokončenia Zapnutý; // konštruktory, getre a setre}

Zkompilovanú šablónu je možné vykonať, aby sa získal HTML, ako je uvedené nižšie:

Todo todo = nové Todo („Todo 1“, „Popis“); Zapisovateľ StringWriter = nový StringWriter (); m.execute (spisovateľ, todo) .flush (); Reťazec html = writer.toString ();

5. Časti a iterácie fúzy

Poďme sa teraz pozrieť na to, ako uviesť zoznam úloh. Na iteráciu nad údajmi zo zoznamu používame sekcie Moustache.

Sekcia je blok kódu, ktorý sa opakuje jeden alebo viackrát v závislosti od hodnoty kľúča v aktuálnom kontexte.

Vyzerá to asi takto:

{{#todo}} {{/ todo}}

Sekcia sa začína znakom libra (#) a končí sa lomkou (/), kde za každým znamienkom nasleduje kľúč, ktorého hodnota sa používa ako základ pre vykreslenie sekcie.

Nasledujú scenáre, ktoré sa môžu vyskytnúť v závislosti od hodnoty kľúča:

5.1. Sekcia s neprázdnym zoznamom alebo s nepravdivou hodnotou

Vytvorme šablónu todo-section.mustache ktorý používa sekciu:

{{#robiť}} 

{{title}}

Vytvorené {{createdOn}}

{{text}}

{{/robiť}}

Pozrime sa na túto šablónu v akcii:

@Test public void givenTodoObject_whenGetHtml_thenSuccess () vyvolá IOException {Todo todo = new Todo ("Todo 1", "Todo description"); Moustache m = MustacheUtil.getMustacheFactory () .compile ("todo.mustache"); Kontext mapy = nový HashMap (); context.put ("todo", todo); Očakávaný reťazec = "

Todo 1

"; assertThat (executeTemplate (m, todo)). obsahuje (očakávané);}

Vytvorme ďalšiu šablónu todos.mustache pre zoznam úloh:

{{#todos}} 

{{title}}

{{/ todos}}

A pomocou neho vytvorte zoznam úloh:

@ Test public void givenTodoList_whenGetHtml_thenSuccess () vyvolá IOException {Moustache m = MustacheUtil.getMustacheFactory () .compile ("todos.mustache"); Zoznam todos = Arrays.asList (nové Todo ("Todo 1", "Todo description"), nové Todo ("Todo 2", "Todo description another"), new Todo ("Todo 3", "Todo description another") ); Kontext mapy = nový HashMap (); context.put ("todos", todos); assertThat (executeTemplate (m, kontext)). obsahuje ("

Todo 1

„) .obsahuje (“

Todo 2

„) .obsahuje (“

Todo 3

"); }

5.2. Oddiel s prázdnym Zoznam alebo Falošné alebo Nulový Hodnota

Poďme vyskúšať todo-section.mustache s nulový hodnota:

@Test public void givenNullTodoObject_whenGetHtml_thenEmptyHtml () hodí IOException {Mustache m = MustacheUtil.getMustacheFactory () .compile ("todo-section.mustache"); Kontext mapy = nový HashMap (); assertThat (executeTemplate (m, kontext)). isEmpty (); }

A rovnako aj otestovať todos.mustache s prázdnym zoznamom:

@Test public void givenEmptyList_whenGetHtml_thenEmptyHtml () vyvolá IOException {Mustache m = MustacheUtil.getMustacheFactory () .compile ("todos.mustache"); Kontext mapy = nový HashMap (); assertThat (executeTemplate (m, kontext)). isEmpty () ;; }

6. Obrátené rezy

Obrátené sekcie sú tie, ktoré sa na základe neexistencie vykresľujú iba raz kľúča alebo nepravdivé alebo nulový hodnota alebo prázdny zoznam. Inými slovami, vykresľujú sa, ak sa časť nevykresľuje.

Začínajú sa vsuvkou (^) a končia lomkou (/), ako je to znázornené nižšie:

{{#todos}} 

{{title}}

{{/ todos}} {{^ todos}}

Žiadne úlohy!

{{/ todos}}

Vyššie uvedená šablóna, ak je poskytnutá s prázdnym zoznamom:

@Test public void givenEmptyList_whenGetHtmlUsingInvertedSection_thenHtml () vyvolá IOException {Mustache m = MustacheUtil.getMustacheFactory () .compile ("todos-inverted-section.mustache"); Kontext mapy = nový HashMap (); assertThat (executeTemplate (m, kontext) .trim ()) .isEqualTo ("

Žiadne úlohy!

"); }

7. Lambdas

The hodnoty pre kľúče sekcie fúzy môžu byť funkcia alebo výraz lambda. V takom prípade je úplný výraz lambda vyvolaný odovzdaním textu v sekcii ako parametra výrazu lambda.

Pozrime sa na šablónu todos-lambda.mustache:

{{#todos}} 

{{title}} {{# handleDone}} {{doneSince}} {{/ handleDone}}

{{/ todos}}

The handleDone kľúč vyrieši výraz Java 8 lambda, ako je uvedené nižšie:

public Function handleDone () {return (obj) -> hotovo? String.format ("Hotové pred% s minútami", obj): ""; }

HTML generovaný vykonaním vyššie uvedenej šablóny je:

Todo 1

Todo 2

Todo 3Done pred 5 minútami

8. Záver

V tomto úvodnom článku sme sa zaoberali vytváraním šablón fúzov s oddielmi, obrátenými oddielmi a lambdami. Na zostavenie a spustenie šablón sme použili rozhranie Java API, ktoré sme poskytli relevantné údaje.

Existuje niekoľko pokročilejších funkcií fúzy, ktoré stojí za preskúmanie - napríklad:

  • poskytnutie vypočítateľnej hodnoty, ktorá vedie k súbežnému vyhodnoteniu
  • použitím Zdobená zbierka získať prvý, posledný a index prvkov zbierky
  • obrátiť API, ktoré poskytuje údaje s daným textom a šablónou

A ako vždy, kompletný zdrojový kód je k dispozícii na stránkach Github.


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