基於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代碼,這裏PageUtil中targetUrl屬性是點擊分頁中某一頁時,所請求的action以及處理方法。
pageCode = PageUtil.genPagation(httpServletRequest.getContextPath() + "/dataDic!list", total, pageBean.getPage(), pageBean.getPageSize());
這樣就大功告成了。