Thymeleaf常用語法:數據延遲載入

来源:https://www.cnblogs.com/gdjlc/archive/2019/10/18/11701297.html
-Advertisement-
Play Games

在處理模板時,可以由模板邏輯決定是否載入數據,以提高性能。 在Spring Boot控制器中設置數據時,使用LazyContextVariable可以實現這功能。 ...


在處理模板時,可以由模板邏輯決定是否載入數據,以提高性能。
在Spring Boot控制器中設置數據時,使用LazyContextVariable可以實現這功能。

開發環境:IntelliJ IDEA 2019.2.2
Spring Boot版本:2.1.8

新建一個名稱為demo的Spring Boot項目。

1、pom.xml
加入Thymeleaf依賴

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

2、src/main/java/com/example/demo/User.java

package com.example.demo;

public class User {
    Integer id;
    String name;

    public User(Integer id, String name) {
        this.id = id;
        this.name = name;
    }
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

3、src/main/java/com/example/demo/TestController.java

package com.example.demo;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.thymeleaf.context.LazyContextVariable;

import java.util.ArrayList;
import java.util.List;

@Controller
public class TestController {
    @RequestMapping("/{show}")
    public String test(Model model, @PathVariable("show") boolean show){
        model.addAttribute("users", new LazyContextVariable() {
            @Override
            protected Object loadValue() {
                return queryUsers();
            }
        });
        model.addAttribute("show", show);
        return "test";
    }

    private List<User> queryUsers(){
        System.out.println("模擬查詢數據,實際應用中可以直接查詢資料庫");
        List<User> users = new ArrayList<User>();
        users.add(new User(1,"張三"));
        users.add(new User(2,"李四"));
        users.add(new User(3,"王五"));
        return users;
    }
}

4、src/main/resources/templates/test.html 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style type="text/css">
        table { border-collapse:collapse;}
        td { border: 1px solid #C1DAD7;}
    </style>
</head>
<body>
    <table th:if="${show == true}">
        <tr th:each="user : ${users}">
            <td th:text="${user.id}"></td>
            <td th:text="${user.name}"></td>
        </tr>
    </table>
</body>
</html>

 

瀏覽器訪問:
http://localhost:8080/false ,頁面沒顯示數據,控制台沒輸出信息。
http://localhost:8080/true ,頁面顯示數據,控制台輸出"模擬查詢數據,實際應用中可以直接查詢資料庫”。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、 this什麼時候是不能省略的,我們舉個例子來說明 this用來區分局部變數和實例變數的時候,是不能省略的。 二、我們對於構造方法的再次練習,註意我們的註釋,這是這個聯繫的重要總結。 我們看一下這裡面的兩個構造函數,一個是可以傳入參數的,一個是不傳入參數,我們不傳入參數的有個固定的格式:this ...
  • 元組格式 (元素1, 元素2, 元素3, ...) 元素能被訪問,但不能被修改 列表嵌套 列表名[][] print(id(變數名)) 獲取變數的地址值 列表,元組有序集合,字典無序集合 字典 python中唯一的映射類型 格式 字典名 = {'鍵',‘值’,...} 或 字典名 = dict(‘鍵 ...
  • 2019-10-18-21:35:36 面向對象 學面向對象前要先知道什麼叫面向過程,瞭解了什麼叫面向過程才容易理解面向對象 面向過程(強調步驟) 概念:當需要實現一個功能的時候,每一個具體的步驟都要親歷親為,詳細處理每一個細節的過程稱為面向過程 如:把衣服脫下來==>找一個盆==>放點洗衣粉==> ...
  • 在處理模板時,一般情況都是使用變數表達式 ${...} 來顯示變數,還可以使用選定對象表達式 *{...},它也稱為星號表達式。 如果在模板中先選定了對象,則需要使用星號表達式。Thymeleaf的內置對象#object效果等同於星號表達式。 ...
  • (手機橫屏看源碼更方便) 註:java源碼分析部分如無特殊說明均基於 java8 版本。 簡介 大家都知道線程是有生命周期,但是彤哥可以認真負責地告訴你網上幾乎沒有一篇文章講得是完全正確的。 常見的錯誤 有:就緒狀態、運行中狀態(RUNNING)、死亡狀態、中斷狀態、只有阻塞沒有等待狀態、流程圖亂畫 ...
  • day 14 learning python 2019/09/10 [TOC] 49. 網路基礎 49.1 IP地址 IP地址 1. 如何在網路中唯一標識一臺電腦? IP地址 2. 同一臺電腦上的多個程式如何共用網路而不衝突? 網路埠 3. 不同的電腦通信怎麼才能互相理解? 使用相同的協議 ...
  • 我報的錯: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in class path resource [confi ...
  • 我的遠程伺服器是騰訊雲的ubuntu系統機器,本地我的電腦系統是deepin的系統,使用的IDE是vscode。現在就來使用本地的IDE來調試騰訊雲中為網站項目實現邏輯是訪問網站功能變數名稱後,請求被轉發給騰訊雲本地的9001埠,通過ssh隧道,會直接被轉發給deepin本地系統的9001埠。vscod ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...