servlet+mvc實現分頁顯示列表頁
實現分頁顯示有好多種方法,有客戶端顯示的用JS,有服務端分頁的。在此我對服務端的分頁功能進行敘述
先展示下我的專案的目錄結構:
標準的MVC模式,現在我的分頁步驟是從jsp呼叫servlet,通過servlet呼叫對應的service類,service類去呼叫dao類
1、先看下頁面中的呼叫方式:
<div>當前${requestScope.pageBean.currentPage}/${requestScope.pageBean.totalPage }頁
<a href="${pageContext.request.contextPath}/SenInfoManagerServlet?method=showSenInfo¤tPage=1" >首頁</a>
<a href="${pageContext.request.contextPath }/SenInfoManagerServlet?method=showSenInfo¤tPage=${requestScope.pageBean.currentPage-1}">上一頁</a>
<a href="${pageContext.request.contextPath }/SenInfoManagerServlet?method=showSenInfo¤tPage=${requestScope.pageBean.currentPage+1}" >下一頁</a>
<a href="${pageContext.request.contextPath }/SenInfoManagerServlet?method=showSenInfo¤tPage=${requestScope.pageBean.totalPage}">尾頁</a>
</div>
定義了當前頁,首頁,上一頁,下一頁,尾頁等方式。通過呼叫對應的servlet及currentPage,totalPage等引數,傳遞對應的pageBean資料
2、再看下servlet呼叫時的程式碼:
private void showSenInfo(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{
try {
String currPage = request.getParameter ("currentPage");
if(currPage == null || "".equals(currPage.trim())) {
currPage = "1"; //第一次訪問,設定當前頁為1
}
int currentPage = Integer.parseInt(currPage);
PageBean<SenInfo> pageBean = new PageBean<SenInfo>();
pageBean.setCurrentPage(currentPage);
List<SenInfo> pageData = senInfoService.getAllSenInfo(pageBean);
request.setAttribute("senInfoList",pageData);
request.setAttribute("pageBean", pageBean);
uri = request.getRequestDispatcher("/manager/senInfoManager.jsp");
WebUtils.goTo(request,response,uri);
}catch(Exception e) {
LogUtils.getLogger(SenInfoManagerServlet.class.getName(), "error", e.toString());
}
}
此方法獲取當前頁引數,其中對應的PageBean類是我定義的翻頁的Model類,下面看PageBean對應的設計程式碼:
public class PageBean<T> {
private int currentPage = 1; //當前頁,預設顯示第一頁
private int pageCount = 10; //每頁顯示的行數(查詢返回的行數)
private int totalCount; //總記錄數
private int totalPage; //總頁數= 總記錄數/每頁顯示的行數(+1)
private List<T> pageData; // 分頁查詢到的資料
public int getCurrentPage() {
return currentPage;
}
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
public int getPageCount() {
return pageCount;
}
public void setPageCount(int pageCount) {
this.pageCount = pageCount;
}
public int getTotalCount() {
return totalCount;
}
public void setTotalCount(int totalCount) {
this.totalCount = totalCount;
}
public int getTotalPage() {
if(totalCount % pageCount == 0) {
totalPage = totalCount / pageCount;
}else {
totalPage = totalCount / pageCount +1;
}
return totalPage;
}
public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}
public List<T> getPageData() {
return pageData;
}
public void setPageData(List<T> pageData) {
this.pageData = pageData;
}
}
在此分頁類中設定了當前頁currentPage,每頁顯示的總行數pageCount,總記錄數totalCount,分頁查詢到的資料列表。
3、通過service呼叫dao類不再展示,其中service類沒做其他任何操作,直接呼叫的dao類,現在看看dao類的設計程式碼:
先獲取總數目:
/**
* 獲取總數目
*/
@Override
public int getTotalCount() {
StringBuilder sb = new StringBuilder();
sb.append(" SELECT");
sb.append(" count(*) ");
sb.append(" FROM ");
sb.append(" senInfo");
try {
Long count = qr.query(sb.toString(), new
ScalarHandler<Long>());
return count.intValue();
}catch(Exception e) {
LogUtils.getLogger(SenInfoDao.class.getName(), "error", e.toString());
}
return 0;
}
再獲取每頁對應的資料:
QueryRunner qr = DBUtils.getQueryRunner();
@Override
public List<SenInfo> getAllSenInfo(PageBean<SenInfo> pageBean) {
int totalCount = this.getTotalCount();
pageBean.setTotalCount(totalCount);
if(pageBean.getCurrentPage() <= 0) {
pageBean.setCurrentPage(1);
}else if(pageBean.getCurrentPage() > pageBean.getTotalPage()) {
pageBean.setCurrentPage(pageBean.getTotalPage());
}
//獲取當前頁:計算查詢的起始行,返回的行數
int currentPage = pageBean.getCurrentPage();
int index = (currentPage - 1) * pageBean.getPageCount(); //查詢起始行
int count = pageBean.getPageCount(); //每頁顯示的行數
List<Object> list = new ArrayList<Object>();
StringBuilder sb = new StringBuilder();
sb.append(" SELECT");
sb.append(" *");
sb.append(" FROM ");
sb.append(" senInfo ");
sb.append(" limit ?,? ");
list.add(index);
list.add(count);
List<SenInfo> pageData = null;
try {
//根據當前頁,查詢當前頁資料(一頁資料)
if(index >= 0) {
pageData = qr.query(sb.toString(), new BeanListHandler<SenInfo>(SenInfo.class),list.toArray());
pageBean.setPageData(pageData);
System.out.println("資料:"+pageData.toString());
}
}catch(Exception e) {
LogUtils.getLogger(SenInfoDao.class.getName(), "error", e.toString());
}
return pageData;
}
其中的實質內容在於mysql的語句,mysql分頁語句如下:
Select * from 表名 limit startrow,pagesize
(Pagesize為每頁顯示的記錄條數)
附:資料庫分頁查詢語句:
1.oracle資料庫分頁
select * from (select a.*,rownum rc from 表名 where rownum<=endrow) a where a.rc>=startrow
2.DB2資料庫分頁
Select * from (select rownumber() over() as rc,a.* from (select * from 表名 order by列名) as a) where rc between startrow and endrow
3.SQL Server 2000資料庫分頁
Select top pagesize * from 表名 where 列名 not in(select top pagesize*page 列名 from 表名 order by列名) order by列名
4.SQL Server 2005資料庫分頁
Select * from (select 列名,row_number() over(order by 列名1) as 別名from 表名) as t where t.列名1>=startrow and t.列名1<=endrow
5.MySQL資料庫分頁
Select * from 表名 limit startrow,pagesize
(Pagesize為每頁顯示的記錄條數)
6.PostgreSQL資料庫分頁
Select * from 表名 limit pagesize,offset startrow
(Pagesize為每頁顯示的記錄條數)
總結:上述標準展示了MVC的呼叫方法,具體程式碼就不再過多顯示。
程式碼有何不懂,可以跟帖回問。僅供參考!
相關推薦
servlet+mvc實現分頁顯示列表頁
實現分頁顯示有好多種方法,有客戶端顯示的用JS,有服務端分頁的。在此我對服務端的分頁功能進行敘述 先展示下我的專案的目錄結構: 標準的MVC模式,現在我的分頁步驟是從jsp呼叫servlet,通過servlet呼叫對應的service類,service類
asp.net MVC 使用PagedList.MVC實現分頁
nbsp 超出 inf length names .cn www 名稱 ger 在上一篇的EF之DB First中,存在以下的兩個問題: 1. 添加/編輯頁面顯示的是屬性名稱,而非自定義的名稱(如:姓名、專業...) 2. 添加/編輯時沒有加入驗證 3. 數據展示使用分頁
servlet如何實現分頁技術
Java中常見的分頁類別有物理分頁和邏輯分頁。對於一般的model專案可以使用邏輯分頁,對於資料比較多的,建議使用物理分頁。 物理分頁 只從資料庫中查詢出當前頁面的資料,不佔用很多記憶體,但效率比較低。 邏輯分頁 從資料庫中找到所有的資料, 儲存到記憶體當中。展示的頁面
servlet+jsp實現分頁
1.PageBean /** * 這是一個用於封裝了分頁的資料 * 包含: * 該頁的學生集合資料 * &n
JSP+Servlet+oracle 實現分頁
效果如下圖: 分析: 1、oracle分頁語句的實現select * from (select rownum as rn,t.* from students t where rownum<=5) where rn>0; 2、需要構造分頁物件,包括 3、當前頁面
小程式中scroll-view元件實現效果之--------城市列表頁的索引(scroll-into-view)
想要實現的功能是在一個城市列表頁實現字母索引 點選字母跳轉到相應的位置,在小程式裡面利用scroll-view特別簡單 首先需要索引字母新增一個點選事件,捕獲到點選的id <view wx:
dedecms自定義模型之獨立模型在首頁、列表頁、內容調用內容
兩個 定義 blog typeid 註意 lists lis curl lds dedecms關於自定義模型(獨立模型)的首頁、列表頁、內容怎麽調用?在後臺自定義模型(獨立模型)的建立及自定義字段的添加比較簡單,需要註意兩點: (1)如果某個字段需要在前臺列表頁顯示,則在前
vue——詳細頁返回列表頁,不重新整理,保留列表頁原來停留位置
經常有這樣的功能,從列表頁上選擇一項,跳到詳細頁,詳細頁看完,返回列表頁。這時,列表頁的元件會重新建立,也就是要重新從介面請求一次資料,並且會回到第一行,對於資料更新要求不高的業務來說,這樣會浪費資源,而且體驗頁不好(列表一共100條,滑動到了90條了,點進去看好明細,出來,
Servlet+AJAX實現資料處理顯示
實現功能:在輸入框中輸入字元,用AJAX傳到後臺Servlet處理後加上隨機數,並返回到前臺顯示。 一、寫前臺jsp頁面index.jsp <%@ page language="java"
Vue專案學習:16-vuex打通首頁和列表頁的資料傳遞,最後有程式設計式導航
終於寫到vuex了,之前看過一些vuex的教程。但是總感覺太複雜,這次自己嘗試把它寫出來。官網地址:https://vuex.vuejs.org/zh-cn/什麼是vuex:官方解釋-Vuex 是一個專為 Vue.js 應用程式開發的狀態管理模式。它採用集中式儲存管理應用的所
織夢DEDECMS首頁、列表頁、文章頁呼叫評論數、收藏數標籤
效果: 23個收藏 | 23個評論 | 23次被瀏覽 一:文章頁呼叫評論數標籤: <small>{dede:field.id runphp='yes'}$dsql = new dedesql(false);$dsql -> SetQuery("Selec
Django前端實現列表分頁顯示
有兩種方案: 一、使用Django的分頁外掛 詳細步驟參考http://blog.csdn.net/fighter_yy/article/details/41308277 缺點:django1.6版本之前無法使用 二、使用datatable(功能更強大,推薦)
JSP實現 留言板 分頁顯示,新留言顯示在第一個~
date() sdf style string hid pre || lan pat 頁面效果圖: 留言Servlet-----MessageServlet package cn.MuJH.newsManager.servlet; import java.io.
織夢用dede:sql實現列表頁分頁教程方法
將dede:list標籤進行改造,使用SQL標籤實現靜態分頁,在自定義表單呼叫的分頁用他就很方便 例如會員列表的模板標籤寫法 {dede:listsql sql="select * from myblog_member" pagesize="10"} <li><a href="https
後臺管理實現分頁顯示----核心分頁物件
需求 實現簡單的分頁管理資料的頁面功能,類似下面 採用物理分頁方式:即每開啟一頁都互動從後臺取回需要頁資料 同時也有邏輯分頁方式,就是一次互動,後臺把所有的所有頁面資料一起發過來,前端自己分頁顯示。雖互動簡單,但也不沒了實時性,不提倡。 解決方法 物
例項:建立一個表格,分頁顯示資料(MongoDB資料庫儲存),功能:實現增刪改查
需求:建立一個表格,分頁顯示資料,功能:實現增刪改查 效果圖: 自動建立一個專案 命令列: express mongodb-demo --view=ejs cd mongodb-demo npm install npm install mongodb --save npm sta
PageHelper與bootstrap的模態框,以及jquery程式碼實現分頁查詢顯示以及Echart的使用
模板下載地址:https://files.cnblogs.com/files/han-guang-xue/%E5%88%86%E9%A1%B5%E6%A8%A1%E6%9D%BF.zip jquery程式碼 var pn; var maxPn; $(function () { loading
Winform 圖片預覽列表+分頁顯示
針對圖片列表展示資訊,一開始沒有做過相關類似的功能,大多都是以表格行顯示為主,所以剛開始實現這個功能的時候是懵逼的。無從下口。在網上搜索一時半會也沒找到合適的解決方案。大致就是類似於下圖這樣,每條資料上面是圖片,下面是對應的相關資訊,在介面上進行一次排列,在介面上分頁展
Java Web分頁顯示實現思路
實現效果 一.需求描述 從資料庫中將所有資料查詢出來,分頁顯示在前端頁面上,每頁顯示若干條資料,並實現"首頁","上一頁","下一頁","尾頁","跳轉至指定頁碼","顯示當前頁碼"等功能 二.實現思路 我的思路是將當前頁碼的值作為引數傳給servlet
Bootstrap結合angularjs分頁顯示,實現當前選中居中效果
bosfore_app.controller("ctrlRead", ['$scope', '$http', function($scope, $http) { $scope.currentPage = 1; //當前頁 $scope.pageSize = 4; /