基於Struts2框架的分頁技術分享

基於Struts2框架的分頁技術分享

寫在最前面

今天被朋友圈一條京東確認12G數據用戶數據泄漏 你要跑贏騙子的說說嚇了一跳。記得好像在去年的時候就好像聽說過說Struts2存在漏洞,只是沒有造成這麼大的損失。不過經這麼一檔子事兒,我相信struts2會越來越完美哈~~~

來看今天的新get√ 以下內容簡略的介紹了struts2中的分頁技術處理,不適合剛學struts2者學習,有過struts2項目經驗的同學無礙。

分頁的目的是爲了在網頁上動態的展示,從數據庫中查詢出的數據。以前在學校學的分頁處理都感覺很複雜,今天學習到一個自己覺得挺簡單的處理方法。所以,簡單分享一下。

首先

在進行分頁處理前需要用到以下幾個類:

將有關分頁的屬性封裝成一個名爲PageBean的類

 package com.stuinforms.hoictas.entity;

    public class PageBean
    {
    private int page;  //第幾頁
    private int pageSize;  //每頁記錄數
    private int start; //第幾條數據

    public int getPage()
    {
    return page;
    }

    public void setPage(int page)
    {
    this.page = page;
    }

    public int getPageSize()
    {
    return pageSize;
    }

    public void setPageSize(int pageSize)
    {
    this.pageSize = pageSize;
    }

    public int getStart()
    {
    return (page - 1) * pageSize;
    }

    public void setStart(int start)
    {
    this.start = start;
    }

    @Override
    public String toString()
    {
    return "PageBean{" +
    "page=" + page +
    ", pageSize=" + pageSize +
    ", start=" + start +
    '}';
    }
    }

將通常分頁操作的代碼提取出來成PageUtil工具類。

    package com.stuinforms.hoictas.util;

    public class PageUtil
    {

    public static String genPagation(String targetUrl, int totalNum, int currentPage, int pageSize)
    {
    int totalPage = totalNum % pageSize == 0 ? totalNum / pageSize : totalNum / pageSize + 1;

    StringBuffer pageCode = new StringBuffer();

    pageCode.append("<li><a href='" + targetUrl + "?page=1'>首頁</a></li>");

    if (currentPage == 1)
    {
    pageCode.append("<li class='disabled'><a href='#'>上一頁</a></li>");
    } else
    {
    pageCode.append("<li><a href='" + targetUrl + "?page=" + (currentPage - 1) + "'>上一頁</a></li>");
    }

    for (int i = currentPage - 2; i <= currentPage + 2; i++)
    {
    if (i < 1 || i > totalPage)
    {
    continue;
    }
    if (i == currentPage)
    {
    pageCode.append("<li class='active'><a href='#'>" + i + "</a></li>");
    } else
    {
    pageCode.append("<li><a href='" + targetUrl + "?page=" + i + "'>" + i + "</a></li>");
    }
    }

    if (currentPage == totalPage)
    {
    pageCode.append("<li class='disabled'><a href='#'>下一頁</a></li>");
    } else
    {
    pageCode.append("<li><a href='" + targetUrl + "?page=" + (currentPage + 1) + "'>下一頁</a></li>");
    }

    pageCode.append("<li><a href='" + targetUrl + "?page=" + totalPage + "'>尾頁</a></li>");

    return pageCode.toString();
    }

    }

現在我們來實際應用一下上面兩個類。假設我們現在要做的是一個學生信息管理系統,我們現在需要完善其中的一項功能,叫查看數據字典。就是在網頁上用戶向後臺發送了一個action請求,後臺返回一個list集合並進行分頁。那麼要在對應的Action中寫入如下屬性:

            if (StringUtil.isEmpty(page))
                {
                page = "1";
                }

因爲是第一次訪問,所以這個action的page的值爲null。程序會進入這個if語句將page賦值爲1。
我們使用PagaBean類創建一個對象,併爲它設置了page屬性和pageSize屬性

        PageBean pageBean = new PageBean();

        pageBean.setPage(Integer.parseInt(page));
        pageBean.setPageSize(Integer.parseInt(PropertiesUtil.getValue("pageSize")));

dataDicDao.dataDicList()方法的作用就是將從第0條數據開始到第8條數據(我們假設pageSize取到的值爲8,pageSize設置每頁數據的條數)的list集合。dataDicListCount()方法是查詢所有數據的總條數(total),並返回一個int類型的結果。

            dataDicList = dataDicDao.dataDicList(conn, dataDic, pageBean);

            total = dataDicDao.dataDicListCount(conn, dataDic);

有了這些值後,我們就可以使用PageUtil的genPagation()返回分頁拼裝出來的html代碼,這裏PageUtiltargetUrl屬性是點擊分頁中某一頁時,所請求的action以及處理方法。

            pageCode = PageUtil.genPagation(httpServletRequest.getContextPath() + "/dataDic!list", total, pageBean.getPage(), pageBean.getPageSize());

這樣就大功告成了。

發佈了29 篇原創文章 · 獲贊 78 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章