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

網上圖書商城實戰(三):Book 模塊分頁查詢與中文參數編碼技巧

     編輯:Java 綜合教學

網上圖書商城實戰(三):Book 模塊分頁查詢與中文參數編碼技巧

本文記錄商品模塊的核心技術點:通用分頁查詢封裝、URL 編碼處理中文參數、多條件動態查詢實現。

1. 通用分頁查詢設計

PageBean 封裝

public class PageBean<T> {
    private int pc;           // 當前頁碼
    private int ps = 12;      // 頁大小
    private int tr;           // 總記錄數
    private List<T> beanList; // 當前頁資料
    private String url;       // 請求 URL(含參數,用於分頁導航)
    // getter/setter 略
}

Service 通用查詢方法

public PageBean<Book> findByCriteria(List<Expression> exprList, int pc) {
    // 1. 建立 PageBean,設定 pc、url
    // 2. 根據 exprList 動態構建 WHERE 子句
    // 3. 查詢總記錄數 tr
    // 4. 查詢當前頁資料 beanList (LIMIT offset, ps)
    // 5. 返回 PageBean
}

關鍵點: url 欄位保存完整請求路徑(如 /BookServlet?method=findByCategory&cid=1&bname=Java),分頁導航直接複用,避免手動拼接參數出錯。

2. 超鏈接中文參數編碼解決方案

JSP 中直接輸出中文參數會導致亂碼,需使用 JSTL <c:url> 自動編碼:

<c:url value="/BookServlet" var="authorUrl">
    <c:param name="method" value="findByAuthor"/>
    <c:param name="author" value="${book.author }"/>
</c:url>
<a href="${authorUrl}" title='${book.author }'>${book.author }</a>

<c:url> 會自動對參數值進行 URL 編碼,生成類似 /BookServlet?method=findByAuthor&author=%E4%B8%AD%E6%96%87 的安全連結。

3. 多條件動態查詢實現

使用 Apache Commons DbUtils 的 Expression 構建動態 WHERE:

List<Expression> exprList = new ArrayList<>();
if (cid != null) exprList.add(new Expression("cid", "=", cid));
if (bname != null) exprList.add(new Expression("bname", "LIKE", "%" + bname + "%"));
if (author != null) exprList.add(new Expression("author", "LIKE", "%" + author + "%"));
// 價格區間
if (minPrice != null) exprList.add(new Expression("price", ">=", minPrice));
if (maxPrice != null) exprList.add(new Expression("price", "<=", maxPrice));

4. 分頁導航 JSP 片段

<div class="pagebar">
    <c:if test="${pb.pc != 1}">
        <a href="${pb.url}&pc=1">首頁</a>
        <a href="${pb.url}&pc=${pb.pc-1}">上一頁</a>
    </c:if>
    
    <c:forEach begin="1" end="${pb.tp}" var="i">
        <c:choose>
            <c:when test="${i == pb.pc}">
                <span class="current">${i}</span>
            </c:when>
            <c:otherwise>
                <a href="${pb.url}&pc=${i}">${i}</a>
            </c:otherwise>
        </c:choose>
    </c:forEach>
    
    <c:if test="${pb.pc != pb.tp}">
        <a href="${pb.url}&pc=${pb.pc+1}">下一頁</a>
        <a href="${pb.url}&pc=${pb.tp}">尾頁</a>
    </c:if>
</div>

5. 圖片展示

Book 模塊頁面截圖

通用分頁封裝 + <c:url> 編碼,讓分頁查詢代碼既乾淨又健壯,是 Java Web 開發的經典最佳實踐。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved