thymeleaf
    
    Tartalomjegyzék
    
    
    alapok
    
      - 
        Ha thymeleaf template rendszert akarunk használni egy spring boot alkalmazásban, 
        akkor a következők szükségesek a pom.xml-ben:
        
      
- 
        A pom.xml-ben az is beállítható, hogy melyik thymeleaf verziót használjuk: 
        
      
thEL
    alapok
    
      - 
        thEL = thymeleaf Expression Language
      
- 
        Tipikusan ilyen helyeken használható thEL:
        
      
- 
        A ${} belseje nem thEL-ként értelmeződik, ezért lehetőleg minimális dolgot írjunk bele, 
        például csak model változóra való hivatkozást.
      
- 
        Text literals:
 Aposztróf határolójel nélkül is működik bizonyos esetekben, de nem javasolt, mert nem minden esetben jó,
        például nem tartalmazhat space-t.
- 
        Number literals: 
        
      
- 
        Boolean literals:
        
      
- 
        Null literal:
        
      
- 
        NO OPERATION literal.
 Jelentése: nem kell a műveletet elvégezni.
- 
        Text operations:
        
      
- 
        Literal substitutions:
        
      
- 
        Numeric operations:
        
      
- 
        Boolean operations:
        
      
- 
        Comparators:
        
      
- 
        IF-THEN-ELSE operator:
        
      
- 
        IF-THEN operator:
        
        ezzel egyenértékű: 
        
      
- 
        DEFAULT operator.
 Ha az érték null, akkor a default-érték lép életbe, bármely más esetben marad az eredeti érték.
példák
    
      - 
        A lenti példákban feltételezzük hogy a modelben: 
        
      
- 
        thEL kifejezés értéke, illetve hatása:
        
      
${...}
    
      - 
        Nemlétező elem elérése:
        
      
- 
        POJO elérése:
        
      
- 
        Tömb, List egy elemének elérése:
        
        A tömb, List nemlétező indexére való hivatkozás exception-t okoz.
 Tömb, List esetén ha a []-en belül nem szám van, az mindig változónévként értelmeződik.
- 
        Map egy elemének elérése kulcs alapján:
        
        Map esetén ha a [] tartalma sosem változónévként, hanem kulcs stringként értelmeződik. 
        Kivéve ha használjuk a #vars kifejezést!
      
- 
        Http request paraméterhez való hozzáférés: 
        
        Amennyiben többször fordul elő az xy paraméter akkor az egyes elemeihez való hozzáférés:
        
      
- 
        Http session attribútumhoz való hozzáférés:
        
        Ha nincs "xy" attribútum akkor null.
      
- 
        Spring bean tagjához való hozzáférés (akár statikus, akár nem statikus tag):
        
        Amennyiben a bean-nek nem adtunk külön nevet, akkor a kisbetűs módszerrel képezhető a neve: MyBean.java 
        esetén a név: "myBean".
      
- 
        Spring bean metódushoz való hozzáférés:
 Hasznos ha például az alkalmazás címének minden lapon meg kell jelennie, ezt ne kelljen minden model-be betennni, 
        hanem egyetlen bean metódus adja vissza, és ez meghívható minden view-ból.
        
        Amennyiben a bean-nek nem adtunk külön nevet, akkor a kisbetűs módszerrel képezhető a neve: 
        MyBean.java esetén a név: "myBean".
 Példa: a spring automatikusan létrehozza az Environment spring-bean-t, melynek segítségével
        hozzáférhetünk külső property-hez, ez a context-path elérése:
- 
        Osztály (nem spring-bean) statikus tagjához hozzáférés.
 Fontos hogy az osztály nevet a package névvel együtt kell megadni "T()" -be zárva:
- 
        Osztály (nem spring-bean) statikus metódusához hozzáférés.
 Fontos hogy az osztály nevet a package névvel együtt kell megadni "T()" -be zárva:
__${...}__
    
      - 
        Ez a preprocessing kifejezés, vagyis 2 aláhúzásjel a kifejezés előtt és után.
 Nemcsak a $ elé írható, hanem a többi kifejezés elé is, például:
- 
        A thymeleaf értelmező motor minden előtt ezeket értékeli ki.
      
- 
        Olyan helyzetben is működik, amikor a #vars már csődöt mond.
      
*{...}
    
      - 
        A *{...} kifejezéssel a th:object által definiált context-en belül lehet elérni az elemeket.
      
- 
        1. példa: felhasználó adatainak elérésére ${...} alkalmazásával: 
        
      
- 
        2. példa: felhasználó adatainak elérésére *{...} alkalmazásával:
        
      
- 
        A módszerek bármikor keverhetők:
        
      
- 
        Ha nincs th:object -tel definiált context, akkor a ${...} és *{...} ugyanazt jelenti.
      
- 
        A *{...} módszer főleg form-ok esetén használatos:
        
      
@{...}
    
      - 
        A @{...} segítségével URL-eket lehet előállítani, amit például itt használhatunk: 
        
      
- 
        Példa "/" jellel kezdődő url-re, amikor a thymeleaf kiegészíti az url-t context-path-szal:
        
      
- 
        Példa nem "/" jellel kezdődő url megadására. Ezesetben nem egészül ki az url context path-szal:
        
      
- 
        Http-get paraméter hozzáadásakor az URL-encoding automatikusan végrehajtódik UTF-8 kódolással:
        
      
#{...}
    
      - 
        A #{...} segítségével a messages.properties fájlban lévő bejegyzéseket lehet elérni.
      
- 
        Példa a messages.properties-ben lévő bejegyzésre:
        
        Ennek elérése úgy, hogy nem helyettesítjük be a {0} és {1} paramétereket, majd behelyettesítjük:
        
        Ha kevesebb paramétert adunk meg, akkor csak egy részük lesz behelyettesítve, ha többet adunk meg, 
        akkor a feleslegesek figyelmen kívül maradnak.
      
- 
        Használhatunk kifejezést is paraméterként:
        
      
~{...}
    
      - 
        Ez a fragment expression, mely a th:insert -nél használatos.
      
|...|
    
      - 
        A |...| kifejezést literal substitutions-nek nevezik.
      
- 
        |...| használata esetén a pipe jelek közé zárt elemeket a thymeleaf sima szövegnek tekinti, 
        a literálok sem érvényesek, csak sima stringként értelmeződnek. 
        Csak a ${...}, *{...}, #{...}, @{...} kifejezések értelmeződnek változó adatnak.
      
- 
        Példa:
        
      
[(...)]
    
      - 
        A [(...)] segítségével inline módon illeszthetünk be model adatot a html szövegbe, html escape nélkül.
      
- 
        Példa:
        
        Itt ugyanaz történik mint a th:utext esetén, csak nincs befoglaló html tag (ami a th:utext esetén van). 
      
- 
        Az adat nem lesz escape-elve.
      
- 
        Lásd még: th:inline
      
[[...]]
    
      - 
        A [[...]] segítségével inline módon illeszthetünk be model adatot a html szövegbe, html escape művelettel.
      
- 
        Példa:
        
        Itt ugyanaz történik mint a th:text esetén, csak nincs befoglaló html tag (ami a th:text esetén van). 
      
- 
        Az adat escape-elve lesz.
      
- 
        Lásd még: th:inline
      
#arrays
    
      - 
        #arrays.length(...)
 Tömb elemszámának lekérdezése. A paraméter nem lehet null, mert az exception-t okoz. Működik List és Set osztályra is.
- 
        #arrays.isEmpty(...)
 Tömb ürességének lekérdezése, az eredmény boolean típusú. A paraméter lehet null is, erre true-t ad vissza. 
        Működik List és Set osztályra is.
#dates
    
      - 
        A java.util.Date adattípus megjelenítését form-mezőben a spring formatter biztosítja.
      
-  
        A java.util.Date adattípus form-mezőn kívüli megjelenése a #dates függvénnyel állítható be:
        
      
#ids
    
      - 
        #ids.seq('név')
 Html id-k gyártása, melyet általában a th:id -vel használnak együtt. A kifejezést többször végrehajtva a 
        következő id-ket állítja elő:
        
        A név lehet üres string is, ezesetben a következő id-ket állítja elő:
        
        Vegyesen is lehet a neveket használni, minden névnél az id 1-től kezdődik, ez adódik hozzá a névhez.
- 
        #ids.prev('név')
 A megadott névvel utoljára kiadott id-t adja vissza, például: név13
 Ha még nem volt ezzel a névvel létrehozott id, az exception-t okoz.
- 
        #ids.next('név')
 A megadott névvel ez az id lesz kiadva, ha majd meghívásra kerül az #ids.seq('név')
 Ha még nem volt ezzel a névvel létrehozott id, akkor ezt adja vissza: név1
#lists
    
      - 
        #lists.size(...)
 List elemszámának lekérdezése. A paraméter nem lehet null, mert az exception-t okoz. 
        Működik tömbre és Set osztályra is.
- 
        #lists.isEmpty(...)
 List ürességének lekérdezése, az eredmény boolean típusú. A paraméter lehet null is, erre true-t ad vissza. 
        Működik tömbre és Set osztály is.
#maps
    
      - 
        #maps.size(...)
 Map elemszámának lekérdezése. A paraméter nem lehet null, mert az exception-t okoz.
- 
        #maps.isEmpty(...)
 Map ürességének lekérdezése, az eredmény boolean típusú. A paraméter lehet null is, erre true-t ad vissza.
#numbers
    
      - 
        Numerikus adattípus formázott megjelenítése.
 Két metódusa van: formatInteger() mely egész számot, formatDecimal() mely lebegőpontos számot formáz.
- 
        A formatXXX() metódusok a null értéket is jól kezelik, mert helyette "" stringet adnak vissza. 
      
- 
        Ha ez egész értéknél pont annyi számjegyre van szükség amennyit a szám tartalmaz, 
        akkor 0-ás értéket adjunk az egész számjegyek számának.
      
- 
        Ezres elválasztó, és tizedes jel csak a következők lehetnek:
        
      
- 
        A formatInteger() és formatDecimal() metódusokhoz is használhatók a Number adattípusok, 
        ezek a típusok biztos használhatók: 
        
      
- 
        #numbers.formatInteger() paraméterezései:
        
      
- 
        Példák egy egész szám (1234567) megjelenítése:
 Minimum 9 számjegy megjelenítése, ezres elválasztó space legyen:
        
        Annyi számjegy megjelenítése amit a szám tartalmaz, ezres elválasztó vessző legyen:
        
        Annyi számjegy megjelenítése amit a szám tartalmaz, nincs ezres elválasztó:
- 
        #numbers.formatDecimal() paraméterezései:
        
      
#sets
    
      - 
        #sets.size(...)
 Set elemszámának lekérdezése. A paraméter nem lehet null, mert az exception-t okoz. 
        Működik tömbre és List osztályra is.
- 
        #sets.isEmpty(...)
 Set ürességének lekérdezése, az eredmény boolean típusú. A paraméter lehet null is, erre true-t ad vissza. 
        Működik tömbre és List osztályra is.
#strings
    
      - 
        #strings.abbreviate(...)
 Adat levágása ha a megadott hosszt túlhaladja. Ha levágás történik, akkor kiegészíti "..." karakterekkel, például:
#temporals
    
      - 
        A LocalDate, LocalTime adattípus megjelenítését form-mezőben a spring formatter biztosítja.
      
-  
        A LocalDate, LocalTime adattípus form-mezőn kívüli megjelenése a #temporals függvénnyel állítható be:
        
      
- 
        A BuildProperties spring-bean build időponját mutattó getTime is jól formázható vele,
        és a build magyar időpontját fogja megjeleníteni:
        
      
- 
        A #temporals nem része a thymeleaf alapcsomagnak, azonban ha a pom.xml-ben használjuk a 
        spring-boot-starter-thymeleaf -et, akkor az behúzza a thymeleaf-extras-java8time csomagot, 
        mely tartalmazza a #temporals függvényt!
      
#vars
    
      - 
        Hozzáférés a változókhoz. 
      
- 
        Például a ${something} ugyanaz mint a ${#vars.something}, ezesetben felesleges a #vars használata.
      
- 
        Előnye akkor van ha egy stringet a thymeleaf nem akar változóként értelmezni, de a #vars használatával 
        kikényszeríthető a változóként értelmezés.
 Például map használatakor a kulcs a mapkulcs változóban van, de a mapkulcs 
        itt string-ként értelmeződik:
        
        helyette ezt kell használni:
application.yml
    
      - 
        Fontosabb beállítások az application.yml fájlban, mely a thymeleaf-re vonatkozik:
        
          - 
            Enable template caching.
            
          
- 
            Template encoding.
            
          
- 
            Template mode to be applied to templates. See also StandardTemplateModeHandlers.
            
          
- 
            Prefix that gets prepended to view names when building a URL. Default --> classpath:/templates/
            
          
- 
            Suffix that gets appended to view names when building a URL. Default --> .html
            
          
 
- 
        Javasolt beállítások:
        
          - 
            A html-ek a "view" könyvtárban vannak.
 (nem kell a végére "/" jel, mert a controllerben így adjuk meg: /menu.html, és emiatt hibás lenne a dupla "/" jel)
- 
            Nincs suffix, ugyanis ezt kiírjuk a view megadásakor a controllerben, például: /menu.html
            
          
- 
            Az újabb thymeleaf már nem támogatja a HTML5 módot, ezt üzeni:
 "Template Mode 'HTML5' is deprecated. Using Template Mode 'HTML' instead."
 Ezért ezt kell beállítani:
 
attribute precedence
    
      - 
        Egy html tagon belüli th attribútumoknak előre meghatározott a precedenciájuk, 
        vagyis az hogy melyiket hajtja előbb végre a thymeleaf template értelmező. 
        Így tehát mindegy milyen sorrendben írjuk le őket.
      
- 
        Például a th:each mindig előbb hajtódik végre mint a th:text, így a következő 2 kifejezés egyenértékű: 
        
      
- 
        Dokumentáció: thymeleaf-using.pdf 10-es pontja  
      
conversion service
    
      - 
        EZ A FUNKCIÓ NEM MŰKÖDIK A FORMON KÍVÜL, PEDIG A THYMELEAF DOKUMENTÁCIÓ SZERINT A FORMON KÍVÜL IS MŰKÖDŐKÉPES.
      
- 
        Formon belül az input elemeknél automatikusan működik a conversion service, 
        vagyis az objektumok úgy jelennek meg ahogy a spring context-ben a formatterek/konverterek definiálják a 
        string <--> objektum konverziót.
      
- 
        Más elemeknél ha szeretnénk a conversion service szerinti megjelenést, 
        akkor a dupla kapcsos-zárójelet kell használni: 
        
      
- 
        Például ha a spring-ben a dátumra az éééé.hh.nn formátum van beállítva, akkor egy dátum megjelenítése:   
        
        esetén a dátum objektum toString() szerint jelenik meg: 
        
        de ha bekapcsoljuk a conversion service-t:
        
        akkor a springben definiált formatter/konverter szerint ez jelenik meg:
        
      
form
    
      - 
        Használat:
        
      
- 
        A th:object megadása kötelező.
      
- 
        A th:action elhagyható, de mindig adjuk meg!
      
- 
        A method post típusú.
      
- 
        A formon belül a mezőkre *{...} módon kell hivatkozni.
      
form checkbox
    A checkbox-ról általában
    
      - 
        A spring a generált html-ben a mezőhöz tartozó "id"-t a "name"-hez képest egy számmal is kiegészíti.
 Ezért ha <label>-t használunk a checkbox-hoz, az id-re dinamikusan kell hivatkozni az 
        #ids.next() vagy #ids.prev() segítségével.
      Single checkbox: olyan checkbox melynek "name" attribútum értéke csak egyszer szerepel a formon belül
    
    
      - 
        Használat:
        
      
- 
        A hozzátartozó model csak boolean típusú lehet!
      
- 
        Nem használható hozzá a th:value, illetve használata esetén figyelmen kívül marad ! 
      
Multiple checkbox: több checkbox melyeknek ugyanaz a "name" attribútuma
    
      - 
        java:
        
      
- 
        html:
        
      
- 
        Form submit esetén a multiple checkbox "value" értékei kerülnek elküldésre a form bean mezőhöz.
      
form errors
    A form errors-ról általában
    
      - 
        A hibákat mindig a formon belül irassuk ki !
      
Field errors: mezőhöz rendelt hibák
    
      - 
        (1) Mező kinézetének megváltoztatása class hozzárendelésével:
        
        de ennél jobb megoldás a th:errorclass használata:
        
        Ha a mező nem hibás akkor csak a class="eredeti" kerül a html-be, ha hibás akkor pedig a 
        class="eredeti hibaosztály",
        vagyis a th:errorclass -nál megnevezett osztály hozzáadódik az eredeti class-hoz.
      
- 
        (2) Mezőhöz tartozó hibaszövegek kiírása a mező közelében:
 A hibaszövegek tetszőlegesen formázhatók, például megjelenítés <ul>...</ul> formában:
        
        vagy pedig ha megelégszünk hogy a mezőhöz tartozó hibaszövegek csak egy <br/> 
        jellel lesznek egymástól elválasztva:
        
        melynek megjelenése a html-ben 2 mezőhiba esetén:
Global errors: nem mezőhöz rendelt hibák
    
      - 
        A globális hibák megjelenítése például <ul>...</ul> formában:
        
      
Összes hiba kiiratása: field errors + global errors
    
      - 
        Hasznos lehet ha egy oldalon nem minden hiba kerül kiírásra, és nyomozni kell a nem megjelenő hibák után.
      
- 
        Példa az összes hiba kiiratására:  
        
      
form radiobutton
    
      - 
        A spring a generált html-ben a mezőhöz tartozó "id"-t a "name"-hez képest egy számmal is kiegészíti.
 Ezért ha <label>-t használunk a radiogomb-hoz, 
        az "id"-re dinamikusan kell hivatkozni az #ids.next() vagy #ids.prev() segítségével.
- 
        java:
        
      
- 
        html:
        
      
form select
    Single select: nincs "multiple" attribútuma
    
    Multiple select: van "multiple" attribútuma
    
    
    form textarea
    
    
    form textfield
    Single textfield
    
    Multiple textfield
    
      - 
        Ebben az esetben a java tömb-ként (list-ként) fogadja az űrlap ezen elemeit.
 A html szabvány szerint ezen mezőknek ugyanaz a name attribútuma, 
        de szögletes zárójelben index-szel vannak ellátva,
 így az index meghatározza, hogy melyik tömb elemről (list elemről) van szó.
- 
        java:
        
      
- 
        html:
        
        Az index beillesztése csak preprocessing módon lehetséges!
      
no operation
    
      - 
        A no operation -t egy aláhúzásjellel jelöljük, melynek jelentése: a műveletet nem kell végrehajtani.
      
- 
        Használható akkor, ha azt szeretnénk hogy a th:text ne töltse ki a tag belsejét, 
        vagy egy attribútum felülírása ne történjen meg.
      
- 
        Példa, ahol a statikus attribútum felülírása nem történik meg:
        
        eredménye:
        
      
- 
        Példa, ahol a tag belseje nem íródik felül:  
               
        eredménye:
        
      
th:akarmi
    
      - 
        A "th:" után nem csak szabványos elnevezések lehetnek hanem akármi is, például:
        
        Ezesetben ha a modelben az adat=123 akkor a generált html:
        
        Vagyis a "th:akarmi" a renderelt html-ben "akarmi"-ként fog megjelenni, és a kifejezés is kiértékelődik. 
      
- 
        A html-ben megengedett a tetszőleges "data-akarmi" attribútum használata, így például:
        
        ilyen html-t renderel:
        
      
- 
        Egy th:akarmi tag csak egyszer szerepelhet egy html tag-en belül!
      
th:attrappend
    
      - 
        Statikus html attribútumhoz hozzáírás, vagyis az eredeti attribútum érték után írás. 
      
- 
        A hozzáíráskor nem rak be space-t az eredeti és a hozzáírandó string közé, tehát ha ez a cél akkor nekünk kell 
        a space-t megadni.
      
- 
        Ha a class attribútumhoz akarunk hozzáírni, akkor szebb megoldás ha a th:classappend -et használjuk! 
      
- 
        Ha a style attribútumhoz akarunk hozzáírni, akkor szebb megoldás ha a th:styleappend -et használjuk! 
      
- 
        Példa:
        
        eredménye:
        
      
th:attrprepend
    
      - 
        Statikus html attribútum elé írás. 
      
- 
        Az eléírás nem rak be space-t az eredeti és az eléírandó string közé, 
        tehát ha ez a cél akkor nekünk kell a space-t megadni.
      
- 
        Példa:
        
        eredménye:
        
      
th:block
    
      - 
        A thymeleaf egyetlen nem attribútuma, hanem tag-je, mely virtuális tag -nek fogható fel, 
        így nem is generál html-tagot ! 
      
- 
        Példa: egy <div> és <p> elemet egyszerre kell megjeleníteni, vagy elrejteni:
        
      
- 
        Példa: egy th:each ciklusban minden elemre két táblázat sort kell megjeleníteni:
        
      
th:classappend
    
      - 
        Hozzáírás a statikus class attribútumhoz, vagyis az eredeti attribútum érték után írás. 
      
- 
        A hozzáíráskor automatikusan bekerül egy space az eredeti és a hozzáírandó string közé.
      
- 
        Nem okoz problémát ha a html tagnak nincs class attribútuma.
      
- 
        Példa:
        
        eredménye:
        
      
th:each
    
      - 
        Array, List, Set megjelenítése.
 Tegyük fel hogy a model-ben "array" névvel van egy Array, List, vagy Set, melynek elemei egyszerű stringek.
        Már a th:each attribútumot tartalmazó html tag-ben, vagy ezen belüli tag-ekben is 
        hivatkozhatunk a tömb egy elemére, amit a példában az item ciklusváltozó reprezentál:
- 
        Map megjelenítése.
 Tegyük fel hogy a model tartalmaz egy Map objektumot "map" névvel. A map egy elemét az item 
        ciklusváltozó reprezentálja.
        Az item.key kifejezéssel érhető el a kulcs, az item.value kifejezéssel pedig az érték:
- 
        A th:each attribútumnak nem okoz problémát ha az Array, List, Set, Map == null, exception nem keletkezik, 
        olyan mintha üresek lennének! 
      
- 
        A th:each ciklusnak van státusza is, amit egy státuszváltozó reprezentál. A státuszváltozó neve a ciklusváltozó 
        nevéből képződik, egy "Stat" hozzáadásával, tehát ha a ciklusváltozó neve "item", akkor a státuszváltozó "itemStat". 
        Ha nem ilyen nevű státuszváltozót szeretnénk használni, akkor megadható egy másik név például:
        
      
- 
        Státusz állapotok lekérdezése (a példában itemStat státuszváltozó-ból):
        
      
th:FVBA
    
      - 
        Fixed Value Boolean Attributes (FVBA)
 Azokat a html attribútumokat nevezzük FVBA-nak melyeknek csak egyetlen értéke lehet, más nem. Ilyenek például:
- 
        Ezen elemek th: megfelelője úgy működik, hogy csak egy boolean típusú kifejezést kell bennük megadni, 
        a thymeleaf automatikusan a megfelelő értékre konvertálja. Ezek az elemek:
        
      
- 
        Példa:
        
        eredménye:
        
      
th:if
    
      - 
        Html elem megjelenésének vezérlése. Ha a th:if feltétel nem teljesül a html elem, 
        és a gyerek elemek sem jelennek meg.
      
- 
        A feltétel nemcsak logikai, hanem bármilyen típus lehet.
      
- 
        Csak a táblázatban felsorolt esetek minősülnek FALSE-nak:
        
          
            | Típus | Érték |  
            |  | null |  
            | String | trim() + toLowerCase() után az értéke: "false" vagy "off" vagy "no" |  
            | Number | 0 |  
            | Boolean | false |  
 Minden más ami nincs a táblázatban: TRUE
- 
        Tegyük fel hogy a model-ben szerepel egy személy objektum, erre hivatkozik a view:
        
        eredménye:
        
        mivel a th:if igaznak minősül: nem Boolean, nem Number, nem String típusú, és az értéke sem null.
      
th:inline
    
      - 
        A [[...]] és [(...)] különleges értelmezése kikapcsolható a th:inline="none" használatával: 
        
      
- 
        Css esetén a [[...]] és [(...)] használata th:inline="css" módon ajánlott: 
        
      
- 
        Javascript esetén a [[...]] és [(...)] használata th:inline="javascript" módon ajánlott.
        
        A generált javascript-nél berakja az idézőjelet és javascript escape-et is végez:
        
      
th:insert
    
      - 
        A th:insert segítségével egy template fájlba beilleszthető egy másik template egy darabja (fragment-je).
      
- 
        Dokumentáció: thymeleaf-using.pdf 8.2-es pontja  
      
Fragment létrehozása
    
      - 
        A létrehozás egy tetszőleges template-ben lehetséges a th:fragment segítségével:
        
      
- 
        A <th:block> helyett használható más html tag is!
      
- 
        Beillesztéskor ez a th:fragment-et tartalmazó tag, és a gyerekelemei is bekerülnek a fogadó html-be, 
        tehát ha a th:fragment-et tartalmazó tagot nem akarjuk beilleszteni, akkor használjuk a 
        <th:block> -ot ami sosem jelenik meg.
      
Fragment beillesztése
    
      - 
        Beillesztés egy template-be, ahol meg kell nevezni a fragment-et tartalmazó template-et, 
        és a benne lévő fragment nevét:
        
      
- 
        A <th:block> helyett nem érdemes más tagot használni, ugyanis ez a tag is beillesztődik a template-be.
      
- 
        Fragment beillesztésére a th:replace is használható, azonban ezt nem használom. 
        A fogadó template-be nem rakja be th:replace-t tartalmazó tagot, de helyette berakja a fragment-ben 
        lévő th:fragment-et tartalmazó tagot, vagyis az egyiket a másikra cseréli.
      
- 
        A beillesztett template-kód a szokásos módon hozzáfér a model attribútumokhoz, úgy mint a fő template.
      
- 
        A beillesztéshez fragment expression-t használjunk melynek formája: ~{x::y}
 A fragment expression-nek vannak előnyei, például nem kell egy th:if kifejezéssel eldönteni,
        hogy megtörténjen-e egyáltalán a beillesztés:
        
        vagy a fragment kifejezést egy változó is tartalmazhatja:
- 
        A model is meg tudja határozni melyik fragment-et illesszük be, illetve hogy be kell-e valamit illeszteni:
        
      
Egyéb beillesztése
    
      - 
        Úgy is be lehet illeszteni egy másik template-ből hogy nincs benne th:fragment, de ennek az a hátránya,
        hogy a fragment-nek nem lehet átadni paramétert.
 Ebben az esetben a teljes <head>-en belüli részt lehet insert-álni úgy hogy a :: után a 
        "head" szót kell megadni:
        
        vagy pedig a teljes <body>-n belüli részt lehet insert-álni úgy hogy a :: után a 
        "body" szót kell megadni:
- 
        Css szelektorokat felhasználva is be lehet illeszteni a template-be más template egy részének tartalmát, 
        például egy oldalrész:
        
        ami máshol beilleszthető, úgy hogy az elem "id"-jére hivatkozunk css szelektorral:
        
      
Insert paraméter
    
      - 
        Például adjuk át a fragment-nek paraméterben milyen szöveget jelenítsen meg. Fragment:
        
        Fragment beszúrása két helyre, más-más szöveggel:
        
      
th:remove
    
      - 
        A th:remove segítségével a megjelölt html tagot, és gyerekelemeit lehet eltávolítani az oldalról, 
        úgy mintha a th:if feltétele sosem teljesülne. Akkor hasznos ha bizonyos tartalmakat a web-designer 
        szeretne látni a html-ben a program futtatása nélkül, de a futáskor mégsem jelenhetnek meg. 
      
- 
        Azt is meg kell adni milyen elemek törlődjenek:
        
      
- 
        Például a következő template kód:
        
        így jelenik meg:
        
      
th:styleappend
    
      - 
        Hozzáírás a statikus "style" attribútumhoz, vagyis az eredeti attribútum érték után írás. 
      
- 
        A hozzáíráskor automatikusan bekerül egy space az eredeti és a hozzáírandó string közé.
      
- 
        Példa:
        
        eredménye:
        
      
th:switch
    
      - 
        A th:switch szerkezet a java switch működéséhez hasonló, de vannak különbségek:
        
          - 
            Nincs "break". Ezért az első igaz case-ág után biztosan hamisnak fog értékelődni az 
            utána következő többi case-ág.
          
- A default ágat a th:case="*" jelzi.
 
- 
        Például ha a modelben az adat értéke "x" akkor a következő template:
        
        így jelenik meg:
        
      
th:unless
    
      - 
        A th:unless a th:if ellentéte. Így tehát ugyanazzal a feltétellel lehet if 
        ágat és else ágat csinálni a html-ben.
      
- 
        Példa:
        
      
th:utext
    
      - 
        Szöveg kiírása html-escape nélkül.
      
- 
        Példa, vastagbetűs "árvíztűrő" kiiratására:
 A model-ben:
        
        A template-ben:
th:with
    
      - 
        A th:with segítségével template lokális változókat lehet definiálni.
      
- 
        A lokális változók csak azon a html tagon belül érhetők el ahol definiálva lettek.
      
- 
        Ha a model-ben is szerepel a lokális változóval megegyező nevű model attribútum, akkor a lokális változó ezt elfedi, 
        tehát csak a lokális változó tartalmához férünk hozzá a lokális változó hatókörén belül.
      
- 
        Példa:
        
      
- 
        Példa:
        
      
- 
        A th:with precedenciája magasabb mint a th:text kifejezésé, 
        ezért egy tag-on belül együtt is alkalmazhatók: