Bevezetés a bajuszba
1. Áttekintés
Ebben a cikkben a bajusz sablonokra összpontosítunk, és annak egyik Java API-ját használjuk dinamikus HTML tartalom előállításához.
A bajusz egy logikátlan sablonmotor a dinamikus tartalom létrehozásához mint a HTML, többek között a konfigurációs fájlok.
2. Bevezetés
Egyszerűen fogalmazva, a motor besorolása: logikátlan mert nincs olyan konstrukciója, amely támogatná az if-else utasításokat és a ciklusokat.
A Bajusz sablonok körülvett címke nevekből állnak { { } } (amelyek bajuszra hasonlítanak - innen a név), és mögöttük van egy sablon adatait tartalmazó modellobjektum.
3. Maven-függőség
A sablonok összeállítását és végrehajtását több nyelv támogatja - mind kliens, mind szerver oldalon.
A Java-sablonok feldolgozásához használjuk a Java könyvtárát, amely hozzáadható Maven-függőségként.
Java 8+:
com.github.spullara.mustache.java fordító 0.9.4
Java 6/7:
com.github.spullara.mustache.java fordító 0.8.18
A könyvtár legújabb verzióit a Central Maven Repository-ban ellenőrizhetjük.
4. Használat
Nézzünk meg egy egyszerű forgatókönyvet, amely bemutatja, hogyan:
- Írjon egy egyszerű sablont
- Fordítsa le a sablont a Java API segítségével
- A szükséges adatok megadásával hajtsa végre
4.1. Egyszerű bajusz sablon
Létrehozunk egy egyszerű sablont az aktuális feladat részleteinek megjelenítésére:
{{cím}}
Létrehozva: {{createdOn}} {{szöveg}}
A fenti sablonban a göndör zárójelek ({{}}) mezői a következők lehetnek:
- Java osztály metódusai és tulajdonságai
- kulcsai a Térkép tárgy
4.2. A bajusz sablon fordítása
Összeállíthatjuk a sablont az alábbiak szerint:
MustacheFactory mf = new DefaultMustacheFactory (); Bajusz m = mf.compile ("todo.mustache");
Bajuszgyár megkeresi az adott sablont az osztályútvonalon. Példánkban elhelyezzük fáj alatt src / main / resources.
4.3. A bajusz sablon végrehajtása
A sablonhoz megadott adatok a Csinálni osztály, amely meghatározása:
nyilvános osztály Todo {privát húr cím; privát karakterlánc szöveg; privát logikai kész; privát Date createdOn; privát A befejezés dátuma; // kivitelezők, szerelvények és beállítók}
A lefordított sablon futtatható a HTML megszerzéséhez, az alábbiak szerint:
Todo todo = új Todo ("Todo 1", "Leírás"); StringWriter író = new StringWriter (); m.execute (író, todo) .flush (); Karakterlánc html = író.toString ();
5. Bajusz szakaszok és iterációk
Most nézzük meg, hogyan lehet felsorolni a todókat. A lista adatainak ismétléséhez a Bajusz szakaszokat használjuk.
A szakasz egy kódblokk, amelyet egy vagy többször megismételnek, a kulcs értékétől függően az aktuális kontextusban.
Úgy néz ki, mint:
{{#todo}} {{/ todo}}
Egy szakasz fonttal (#) kezdődik és perjellel (/) végződik, ahol az egyes jeleket követi a kulcs, amelynek értékét használják a szakasz renderelésének alapjául.
Az alábbiakban bemutatjuk azokat a forgatókönyveket, amelyek a kulcs értékétől függően előfordulhatnak:
5.1. Szakasz Nem üres listával vagy Nem hamis értékkel
Hozzunk létre egy sablont todo-section.mustache szakaszot használ:
{{#csinálni}} {{cím}}
Létrehozva: {{createdOn}} {{szöveg}}
{{/csinálni}}
Nézzük meg ezt a sablont működés közben:
@Test public void givenTodoObject_whenGetHtml_thenSuccess () dobja az IOException {Todo todo = new Todo ("Todo 1", "Todo description"); Bajusz m = MustacheUtil.getMustacheFactory () .compile ("todo.mustache"); Térkép kontextus = új HashMap (); context.put ("todo", todo); String várható = "Todo 1
"; assertThat (executeTemplate (m, todo)). tartalmazza (várható);}
Hozzunk létre egy másik sablont todos.mustache a feladatok felsorolásához:
{{#todos}} {{cím}}
{{/ todos}}
És hozzon létre egy listát a feladatokról:
@Test public void givenTodoList_whenGetHtml_thenSuccess () dobja az IOException {Bajusz m = MustacheUtil.getMustacheFactory () .compile ("todos.mustache"); Felsorolja a todos = Arrays.asList (új Todo ("Todo 1", "Todo leírás"), új Todo ("Todo 2", "Todo leírás még egy"), új Todo ("Todo 3", "Todo leírás egy másik") ); Térkép kontextus = new HashMap (); context.put ("todos", todos); assertThat (executeTemplate (m, context)) .contains ("Todo 1
"). tartalmaz ("Todo 2
"). tartalmaz ("Todo 3
"); }
5.2. Szakasz üres Lista vagy Hamis vagy Nulla Érték
Teszteljük a todo-section.mustache val,-vel nulla érték:
@Test public void givenNullTodoObject_whenGetHtml_thenEmptyHtml () dobja az IOException {Bajusz m = MustacheUtil.getMustacheFactory () .compile ("todo-section.mustache"); Térkép kontextus = new HashMap (); assertThat (executeTemplate (m, context)). isEmpty (); }
És hasonlóképpen teszteljen todos.mustache üres listával:
@Test public void givenEmptyList_whenGetHtml_thenEmptyHtml () dobja az IOException {Bajusz m = MustacheUtil.getMustacheFactory () .compile ("todos.mustache"); Térkép kontextus = új HashMap (); assertThat (executeTemplate (m, context)). isEmpty () ;; }
6. Fordított szakaszok
Az inverz szakaszok azok, amelyeket a nemlét alapján csak egyszer jelenítenek meg vagy a hamis vagy nulla érték vagy egy üres lista. Más szavakkal, ezek akkor jelennek meg, ha egy szakasz nem jelenik meg.
Ezek kezdőbetűvel (^) kezdődnek és perjellel (/) végződnek az alábbiak szerint:
{{#todos}} {{cím}}
{{/ todos}} {{^ todos}} Nincs semmi!
{{/ todos}}
A fenti sablon üres listával együtt:
@Test public void givenEmptyList_whenGetHtmlUsingInvertedSection_thenHtml () dobja az IOException {Bajusz m = MustacheUtil.getMustacheFactory () .compile ("todos-inverted-section.mustache"); Térkép kontextus = új HashMap (); assertThat (executeTemplate (m, context) .trim ()) .isEqualTo ("Nincs semmi!
"); }
7. Lambdas
A A bajuszszakasz kulcsainak értékei lehetnek függvények vagy lambda kifejezések. Ebben az esetben a teljes lambda kifejezést úgy hívjuk meg, hogy a szakaszon belüli szöveget paraméterként átadjuk a lambda kifejezésnek.
Nézzünk meg egy sablont todos-lambda.mustache:
{{#todos}} {{title}} {{# handDone}} {{doneSince}} {{/ handleDone}}
{{/ todos}}
A handleDone kulcs az alábbiak szerint Java 8 lambda kifejezéssé változik:
public Function handleDone () {return (obj) -> kész? String.format ("Kész% s perccel ezelőtt", obj): ""; }
A fenti sablon végrehajtásával létrehozott HTML:
Todo 1
Todo 2
Todo 3Done 5 perccel ezelőtt
8. Következtetés
Ebben a bevezető cikkben bajusz sablonok létrehozását vizsgáltuk szakaszokkal, fordított szakaszokkal és lambdákkal. És a Java API-t használtuk a sablonok összeállításához és végrehajtásához releváns adatok megadásával.
A Bajusznak van néhány fejlettebb funkciója, amelyeket érdemes felfedezni - például:
- hívható érték biztosítása, amely párhuzamos értékelést eredményez
- felhasználásával Dekorált Gyűjtemény a gyűjtési elemek első, utolsó és indexének megszerzéséhez
- megfordítani API, amely megadja a megadott szöveget és sablont
És mint mindig, ennek teljes forráskódja elérhető a Githubon.