水木告白工做室:Thymeleaf模板引擎

理解Thyme leaf

  • Java模板引擎。可以處理HTML,XML,Javascript,CSS甚至純文本。相似JSP,Freemaker
  • 天然模板。原型即頁面
  • 語法優雅易懂。OGNL,SpringEL
  • 遵循web標準。支持HTML5

Thymeleaf標準方言

如何識別標準方言

  • <span th:text="...">Blabalalalalalala</span>   注意:引號裏面的東西 會替換掉Blabalalalalalala
  • <span data-th-text="...">

標準方言

  • 標準表達式:

    • 變量表達式
      • 語法:${...}     <span th:text="${book.author.name}">...</span>
    • 消息表達式   也稱爲文本外部化,國際化或i18n。
      • 語法:#{...}     
        1 <table>
        2 ...
        3 <th th:text="#{header.address.city}">...</th>
        4 
        5 <th th:text="#{header.address.country}">...</th>
        6 ...
        7 </table>
    • 選擇表達式
      • 語法:*{...}
      • <div th:object="${book}">   取book這個全文對象做爲變量,這個變量有多個屬性
        ...
        <span th:text="*{title}">...</span>   如今取book這個當前對象的title這個屬性
        ...
        </div>

        與變量表達式的區別:它們是在當前選擇的對象而不是整個上下文變量映射上執行。html

    • 連接表達式
      • 語法:@{...}
      • 1.連接表達式能夠是相對的,這種狀況下,應用程序上下文將不會做爲URL的前綴,
        <a th:href="@{../documents/report} ">...</a>
        2.也能夠是服務器相對(一樣,沒有應用程序上下文前綴),
        <a th:href="@{~/contents/main}">...</a>
        3.和協議相對(就像絕對URL,但瀏覽器將使用在顯示的頁面中使用的相同的HTTP或HTTPS協議)
        <a th:href="@{//static.mycompany.com/res/initial}">...</a>
        4.固然Link表達式也能夠是絕對的:
        <a th:=href="@{http://www.mycompany.com/main}">...</a>

         

    • 分段表達式
      • 語法:th:insert或th:replace
      •  1 <html>
         2 ...
         3 <body>
         4 <div th:fragement="copy">
         5 &copy;2018<a href="http://www.baiasnjdsad.com">sada</a>
         6 
         7 </div>
         8 </body>
         9 ...
        10 </html>
        <body>
        ...
        <div th:insert="~{footer::copy}"></div>
        </body>

         

    • 字面量(文本)
  • 文本 用單引號引發來
  • 數字 直接寫 能夠進行加減運算   +-*/%
  • 布爾 <div th:if=" ${user.isAdmin()}==false">...</div>
  • null  <div th:if=" ${book.something}==null">...</div>
  • 比較和等價 >,<,>=,<=,(gt,lt,ge,le)       ==,!=(eq,ne)
    • 條件運算符
      • <tr th:class="${row.even}? ' even' : 'odd' "></tr>
    • 無操做
      • 語法 _  <span th:text=" ${user.name}?:_ "></span>

 

  • 設置屬性值:

    • 設置任意屬性值 th:attr=" action=@{/subscribe}"
    • 設置值到指定的屬性
    • 固定值布爾屬性
  • 迭代器:

    • 基本的迭代 th:each
      • <li th:each="book:${books}"  th:text="${book.title}">...</li>
    • 狀態變量 index,count,size,current,even/odd,first,last
  • 條件語句:

    • th:if,th:unless
    • th:switch
    • 1 <div th:switch="${user.role}">
      2 <p th:case=" 'admin' "> User is an admin </p>
      3 <p th:case="#{roles.manager}"> User is an manager</p>
      4 <p th:case=" '*' "> User is some other </p>
      5 </div>

       

  • 模板佈局:

    • 定義和引用模板 th:fragment(代碼見上)
    • 不使用 th:fragment
    • 1 <div id="copy-section">
      2 &copy; 2017 <a href="www.baidu.com">baidu.com</a>
      3 </div>
      <body>
      ...
      <div th:insert="~{footer::#copy-section}">...</div>
      ...
      </body>

       

    • th:insert  th:replace th:include 三者區別
      • th:insert 它將簡單地插入指定的片斷做爲正文的主標籤。
      • th:replace  用指定實際片斷來替換其主標籤
      • th:include  相似於th:insert 但不是插入片斷,他只插入此片斷的內容。(3.x版本以後 不推薦使用)

  • 屬性優先級:

    •  
  • 註釋:

  • 內聯:

    • [[...]]或[(...)] 分別對應於  th:text和th:utext     utext 不會被轉義
    • <p>  The message is "[(${msg})]" </p>
    • 禁用內聯   有時須要禁用這種機制,好比想輸出 [[....]]或[(...)]文本內容
    • <p th:inline="none">A double array looks like this: [[1,2,3],[4,5]]!</p>
  • 基本對象:

    • 表達式基本對象
    • #ctx:上下文對象。是org.thymeleaf.context,IContext或者org.thymeleaf.context.IWebContext的實現
    • #locale:直接訪問與Java.util.Locale關聯的當前的請求
    • request/session等屬性
      • param:用於檢索請求參數
      • session:用於檢索session屬性
      • application:用於檢索application/servlet上下文屬性
    • Web上下文對象
      • #request:直接訪問與當前請求關聯的javax.servlet.http.HttpSerlvetRequest對象
      • #session:直接訪問與當前請求關聯的javax.servlet,http,HttpSession對象
      • #servletContext:直接訪問與當前請求關聯的Javax。servlet。Servlet Context對象
  • 工具對象:

  • 。。。

相關文章
相關標籤/搜索