thymeleaf 頁面引用實現動態佈局加載
最近在學習使用 springboot+thymeleaf,在把基本的框架佈局功能實現了之後,發現了一些新的問題,就是所有頁面都是全加載,也就是說每個頁面都要實現佈局,真是費時又費力。介於之前的web開發經驗,一般都是上左右的佈局方式,對於一些小的信息化系統建設也是很方便的一說。
通過這幾天不停的看資料(其實就是百度與Google),找實例,看視頻。終於解決了。現將這問題記錄於下,希望可以幫助有緣人。
使用 thymeleaf 佈局
一般業務處理系統都是上左右佈局的方式來實現,同是一些前臺的框架也是這樣佈局的,比如 bootstrap 等,大致如下:
當然也有的是菜單在標題欄處。本次以上圖爲例。之前如果用 jsp 實現上圖的佈局比較簡單,可通過 iframe 標籤來實現。thymeleaf 可通過 fragment 來實現。
fragment類似於JSP的tag,在html中文件中,可以將多個地方出現的元素塊用fragment包起來使用。
支持的th標籤有以下三種方式:
1、th:insert:保留自己的主標籤,保留th:fragment的主標籤。
2、th:replace:不要自己的主標籤,保留th:fragment的主標籤。
3、th:include:保留自己的主標籤,不要th:fragment的主標籤。(官方3.0後不推薦)
具體實現,直接看代碼吧。
父頁面:
<div class="lyear-layout-container">
<!--左側導航-->
<div th:include="common/left::meau_left"></div>
<!--End 左側導航-->
</div>
子頁面:
<div th:fragment='meau_left'>
<h1>這是左側菜單</h1>
</div>
結果:
<div class="lyear-layout-container">
<!--左側導航-->
<div><h1>這是左側菜單</h1></div>
<!--End 左側導航-->
</div>
可以看到在頁面加載完成以後,父頁面加載了子頁面的內容。
總結:
1)、父頁面上用標籤 th:insert / th:replace / th:include 標示出需要加載的子頁面的位置
標籤參數格式:th:include="參數1::參數2"
第一個參數:子頁面的路徑/或html文件名稱(不含擴展名);
第二個參數:爲子頁面th:fragment的值。可以認爲這是一個唯一標識ID。
th:include="::參數2":只寫參數2,這裏指fragment名稱,則加載本頁面對應的fragment。(即父頁中的內容)
th:include="參數1::":只寫參數1,則加載整個頁面,整個html 標籤的內容
2)、子頁面上用標籤 th:fragment 標示出需要加載到的父頁面的內容(th:fragment 這個標籤內的代碼段)