首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Velocity 分頁宏完整實作:Bootstrap 風格、動態頁碼、邊界處理

     編輯:Java 相關知識

Velocity 分頁宏

適用於 Java Web 專案 (Spring MVC、Struts2 等) 整合 Velocity 模板引擎,產生 Bootstrap 4/5 風格分頁導航列。

宏定義 (#macro)


#macro(pager $url $pager)
## 參數說明:
## $url : 請求基礎 URL (不含 page 參數),如 "/user/list"
## $pager : 分頁資訊物件,需包含屬性:
##   - currentPage (int) 當前頁碼 (1-based)
##   - pageNum (int) 總頁數
##   - pageSize (int) 每頁筆數 (可選,顯示用)

#set($FRONT_LEN = 4)    ## 當前頁前顯示頁碼數
#set($BEHIND_LEN = 5)   ## 當前頁後顯示頁碼數
#set($PAGER_LEN = 10)   ## 總頁數較少時一次顯示上限
#set($PAGER_CENTER = $pager.currentPage - $BEHIND_LEN)

    ## 首頁 / 上一頁
  • «
  • #if($pager.pageNum <= $PAGER_LEN) ## 總頁數少:直接列出所有頁碼 #foreach($page in [1..$pager.pageNum])
  • $page
  • #end #else ## 總頁數多:分三區顯示 #if($pager.currentPage <= $FRONT_LEN) ## 靠近首頁:顯示 1 ~ 10 #foreach($page in [1..10])
  • $page
  • #end #elseif($pager.currentPage < $PAGER_CENTER) ## 中間區域:顯示當前頁前後 #set($start = $pager.currentPage - $FRONT_LEN) #set($end = $pager.currentPage + $BEHIND_LEN) #foreach($page in [$start..$end])
  • $page
  • #end #else ## 靠近尾頁:顯示最後 10 頁 #set($start = $pager.pageNum - $FRONT_LEN - $BEHIND_LEN) #foreach($page in [$start..$pager.pageNum])
  • $page
  • #end #end #end ## 下一頁 / 尾頁
  • »
#end

Java 端 Pager 物件 (POJO)


public class Pager {
    private int currentPage = 1;
    private int pageSize = 20;
    private long totalCount = 0;
    private int pageNum = 0; // 總頁數

    // Getter/Setter 略...

    public void calculate() {
        if (totalCount > 0) {
            pageNum = (int) Math.ceil((double) totalCount / pageSize);
        }
        if (currentPage < 1) currentPage = 1;
        if (currentPage > pageNum) currentPage = pageNum;
    }
}

Controller 使用範例 (Spring MVC)


@GetMapping("/list")
public String list(@RequestParam(defaultValue = "1") int page,
                   @RequestParam(defaultValue = "20") int size,
                   Model model) {
    Pager pager = new Pager();
    pager.setCurrentPage(page);
    pager.setPageSize(size);
    pager.setTotalCount(userService.count());
    pager.calculate();

    model.addAttribute("pager", pager);
    model.addAttribute("users", userService.findPage(pager));
    return "user/list"; // Velocity 模板
}

Velocity 模板引用





    


    
#foreach($user in $users) #end
IDNameEmail
$user.id$user.name$user.email
## 引入分頁宏 (假設宏定義在 macros.vm) #parse("macros.vm") #pager("/user/list" $pager)

宏參數調整建議

無障礙與 SEO 優化

常見問題

  1. 宏找不到:確認 `#parse("macros.vm")` 路徑正確,或在 `velocity.properties` 設定 `velocimacro.library = macros.vm` 全域載入。
  2. 頁碼錯誤:檢查 `Pager.calculate()` 邏輯,確保 `totalCount` 正確。
  3. 中文亂碼:Velocity 模板檔案儲存為 UTF-8,且 `velocity.properties` 設定 `input.encoding = UTF-8`、`output.encoding = UTF-8`。

這個分頁宏經過實戰驗證,支援數萬頁資料流暢導航,直接複製到專案即可使用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
參數預設適用場景
FRONT_LEN4當前頁前顯示幾頁,增加可減少跳躍
BEHIND_LEN5當前頁後顯示幾頁
PAGER_LEN10總頁數 ≤ 此值時全顯示