1. 程式人生 > 實用技巧 >thymeleaf模板頁面的兩種佈局方案

thymeleaf模板頁面的兩種佈局方案

  • 採用th:include + th:replace方式進行佈局

 首先,建立佈局檔案layout1.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>佈局方案</title>
    <style>
        * {font-family: Microsoft YaHei, Tahoma, Helvetica, Arial, sans-serif;}
        .header {background-color: #f5f5f5;padding: 20px;}
        .header a {padding: 0 20px;}
        .container {padding: 20px;margin:20px auto;}
        .footer {height: 40px;background-color: #f5f5f5;border-top: 1px solid #ddd;padding: 20px;}
    </style>
 
</head>
<body>
    <header class="header">
        <div>
            採用th:replace方式進行佈局
        </div>
    </header>
    <div  class="container" th:include="::content">頁面正文內容</div>
    <footer class="footer">
        <div>
            <p style="float: left">© Hylun 2017</p>
            <p style="float: right">
                Powered by <a href="http://my.oschina.net/alun" target="_blank">Alun</a>
            </p>
        </div>
    </footer>
 
</body>
</html>

  劃重點!!!這裡就是頁面不斷變化的主體部分。

<div  class="container" th:include="::content">正文內容</div>

  接著我們去編寫頁面正文內容。這裡的th:replace="demo/layout1 內容,該內容指引了第一步中layout1.html檔案所在目錄位置

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org"
      th:replace="demo/layout1">
    <div th:fragment="content">
        頁面中正文內容:採用th:include + th:replace方式進行頁面佈局
    </div>
</html>

  編寫後端Controller程式碼

@Controller
public class DemoController {
    /**
     * 驗證採用th:replace方式佈局的方式
     * @return
     */
    @RequestMapping("layout1")
    public String testLayout1(){
        return "text";
    }
}

  結果如下:

  • 採用layout方式設定

第一步,在pom.xml中加入依賴

<dependency>
    <groupId>nz.net.ultraq.thymeleaf</groupId>
    <artifactId>thymeleaf-layout-dialect</artifactId>
    <version>2.3.0</version>
</dependency>

  第二步,建立佈局檔案layout2.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org"
      xmlns:layout="http://www.ultraq.net.nz/web/thymeleaf/layout">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>layout佈局方案</title>
    <style>
        * {font-family: Microsoft YaHei, Tahoma, Helvetica, Arial, sans-serif;}
        .header {background-color: #f5f5f5;padding: 20px;}
        .header a {padding: 0 20px;}
        .container {padding: 20px;margin:20px auto;}
        .footer {height: 40px;background-color: #f5f5f5;border-top: 1px solid #ddd;padding: 20px;}
    </style>
 
</head>
<body>
    <header class="header">
        <div>
            採用layout方式進行佈局
        </div>
    </header>
    <div  class="container" layout:fragment="content"></div>
    <footer class="footer">
        <div>
            <p style="float: left">© Hylun 2017</p>
            <p style="float: right">
                Powered by <a href="http://my.oschina.net/alun" target="_blank">Alun</a>
            </p>
        </div>
    </footer>
 
</body>
</html>

  xmlns:layout="http://www.ultraq.net.nz/web/thymeleaf/layout" : 引入layout標籤

  <div class="container" layout:fragment="content">頁面正文內容</div> 設定頁面正文內容所在位置

第三步,編寫頁面正文內容

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org"
      xmlns:layout="http://www.ultraq.net.nz/web/thymeleaf/layout"
      layout:decorator="demo/layout2">
    <div layout:fragment="content">
        正文內容222222222222
    </div>
</html>

  layout:decorator="demo/layout2" :此位置指向layout2.html頁面位置

  layout:fragment="content" :指定頁面正文內容 content要與layout2.html頁面中定義的名字一致

  • 模板間傳參

  當採用th:include + th:replace方式進行佈局的時候,模板間可以進行引數傳遞

  layout.html內容

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>佈局方案</title>
    <style>
        * {font-family: Microsoft YaHei, Tahoma, Helvetica, Arial, sans-serif;}
        .header {background-color: #f5f5f5;padding: 20px;}
        .header a {padding: 0 20px;}
        .container {padding: 20px;margin:20px auto;}
        .footer {height: 40px;background-color: #f5f5f5;border-top: 1px solid #ddd;padding: 20px;}
    </style>
 
</head>
<body>
    <header class="header">
        <div>
            採用th:replace方式進行佈局
        </div>
    </header>
    <div  class="container" th:include="::content('傳入引數111111')"></div>
    <footer class="footer">
        <div>
            <p style="float: left">© Hylun 2017</p>
            <p style="float: right">
                Powered by <a href="http://my.oschina.net/alun" target="_blank">Alun</a>
            </p>
        </div>
    </footer>
 
</body>
</html>

  頁面正文內容

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org"
      th:replace="demo/layout1 (title='replace方式佈局')">
    <div th:fragment="content(text)">
        頁面中正文內容:採用th:include + th:replace方式進行頁面佈局
        模板傳輸引數為:<span th:text="${text}"></span>
    </div>
</html>