JSP+JavaBean+Servlet实现各类列表分页功能
需求:
每页列表下都有一个分页的功能,显示总数量、当前页/总页数、首页、上一页、下一页、最后一页、GO到第几页
效果动态图:

实现思路:
因为每个列表页都需要,在每个出列表页数据的servlet中都要求出总数量、当前页、总页数、结果list这几个值,那么我就把这些变量封装到一个基本实体类中,然后在service实现类中去求出这些变量的算法,那么我servlet执行时候,只用获取页面当前页的值,就可以算出所有变量的值。说的有点不清晰,那么我们直接上代码吧!
首先我们先看一下JSP的页面结构:
列表页newsDetailList.jsp:
底部调用公共分页的jsp
<!--隐藏域,当前页码 -->
<input type="hidden" id="pageIndex" name="pageIndex" value="1"/>
<input type="hidden" id="totalPageCount" name="totalPageCount" value="${totalPageCount }"/>
<c:import url="rollPage.jsp">
<c:param name="totalCount" value="${totalCount }"></c:param>
<c:param name="currentPageNo" value="${currentPageNo }"></c:param>
<c:param name="totalPageCount" value="${totalPageCount}"></c:param> </c:import>
上面当前页的设置为隐藏域,只是为了获取当前在第几页这个数据,用来算出其它几个值。
totalPageCount的隐藏域是为了执行输入页面GO到相应页的操作
看一下rollPage.jsp:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
<script type="text/javascript">
function page_nav(frm,num){
frm.pageIndex.value=num;
frm.submit();
} function go(frm,pageno){
//var regexp=/^\d+$/;
var regexp=/^[1-9]\d*$/;
var totalPage = document.getElementById("totalPageCount").value;
if(!regexp.test(pageno)){
alert("请输入 正确的数字!");
return false;
}else if((pageno-totalPageCount) > 0){
alert("总页码一共"+totalPageCount+"页,请输入正确的页码!");
return false;
}else{
page_nav(frm,pageno);
} } </script>
</head> <body> <div class="page-bar">
<ul class="page-num-ul clearfix">
<li>共${param.totalCount}条记录
${param.currentPageNo}/${param.totalPageCount }页</li>
<c:if test="${param.currentPageNo>1}">
<a href="javaScript:page_nav(document.forms[0],1)">首页</a>
<a
href="javaScript:page_nav(document.forms[0],${param.currentPageNo-1});">上一页</a>
</c:if>
<c:if test="${param.currentPageNo<param.totalPageCount}">
<a
href="javaScript:page_nav(document.forms[0],${param.currentPageNo+1});">下一页</a>
<a
href="javaScript:page_nav(document.forms[0],${param.totalPageCount });">最后一页</a>
</c:if>
</ul>
<span class="page-go-form"><label>跳转至</label> <input
type="text" name="inputPage" id="inputPage" class="page-key" value="" />页 <button type="submit" class="page-btn"
onclick='go(document.forms[0],document.getElementById("inputPage").value)'>GO</button> </span>
</div>
</body>
</html>
这个公共的分页,作用:控制分页界面的显示及提交到当前选择的页码
后端DAO实体类:
package com.cn.pb.dao.util; import java.sql.Connection;
import java.util.List; public class PageBase<M> {
//当前页码,默认为第1页
private int currentPageNo =1;
//总页数
private int totalPageCount;
//总记录数
private int totalCount;
//页面容量
private int pageSize=5;
//上一页
private int upPageNo;
//下一页
private int nextPageNo; //一页的结果
private List<M> list; public int getUpPageNo() {
return upPageNo;
}
public void setUpPageNo(int upPageNo) {
//如果当前页>1
if(this.currentPageNo>1){
this.upPageNo = this.currentPageNo-1;
} }
public int getNextPageNo() {
return nextPageNo;
}
public void setNextPageNo(int nextPageNo) {
//如果当前页>0且小于总页数,则可以有下一页
if(this.currentPageNo>0 &&this.currentPageNo<this.totalPageCount){
this.nextPageNo = currentPageNo+1;
} }
public List<M> getList() {
return list;
}
public void setList(List<M> list) {
this.list = list;
}
public int getCurrentPageNo() {
return currentPageNo;
}
//如果当前页码大于0才设置当前页码值
public void setCurrentPageNo(int currentPageNo) {
if(currentPageNo>0){
this.currentPageNo = currentPageNo;
} } public int getTotalCount() {
return totalCount;
}
public void setTotalCount(int totalCount) {
if(totalCount>0){
this.totalCount = totalCount;
} }
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
if(pageSize >0){
this.pageSize = pageSize;
} } public int getTotalPageCount() {
return totalPageCount;
}
public void setTotalPageCount(int totalPageCount) {
if(this.getTotalCount()%this.pageSize==0){
this.totalPageCount = this.getTotalCount()/this.pageSize;
}else if(this.getTotalCount()%this.pageSize>0){
this.totalPageCount = this.getTotalCount()/this.pageSize +1 ;
}else{
this.totalPageCount =0;
}
} /*//设置总页数
public void setTotalPageCount(int ) {
if(this.getTotalCount()%this.pageSize==0){
this.totalPageCount = this.getTotalCount()/this.pageSize;
}else if(this.getTotalCount()%this.pageSize>0){
this.totalPageCount = this.getTotalCount()/this.pageSize +1 ;
}else{
this.totalPageCount =0;
} }
*/ }
service接口:
//分页和list独立出一个javabean
public PageBase<NewsDetail> getPages(int pageNo,String where);
service实现类:
public PageBase<NewsDetail> getPages(int pageNo,
String where) {
PageBase<NewsDetail> pb=new PageBase<NewsDetail>();
pb.setCurrentPageNo(pageNo);
pb.setTotalCount(this.getNewsCount(where));
pb.setTotalPageCount(pb.getTotalCount()/pb.getPageSize());
pb.setNextPageNo(pageNo-1);
pb.setUpPageNo(pageNo+1);
pb.setList(this.getPageNewsList(pageNo, pb.getPageSize(), where));
return pb;
}
web.xml
<servlet>
<servlet-name>newsListByLikeServlet</servlet-name>
<servlet-class>com.cn.pb.servlet.NewsListByLike3</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>newsListByLikeServlet</servlet-name>
<url-pattern>/servlet/newsListServlet</url-pattern>
</servlet-mapping>
其实也就是把我上一篇<JSP+Servlet+javabean实现页面多条件模糊查询>中servlet那部分分页和求结果list给抽出来封装了,好吧,我只是改了web.xml中的类名,其它地方啥都不用改。可以多个servlet切着来
JSP+JavaBean+Servlet实现各类列表分页功能的更多相关文章
- Struts与jsp+javabean+servlet区别
采用Struts框架技术和直接使用jsp+javabean技术开发各有什么优势?各自的缺点又是什么? 在Javaweb开发领域存在2种开发模式, 模式一,jsp+javabean 模式二,jsp+ja ...
- JSP+JavaBean+Servlet技术(MVC模型)
一,Servlet开发用户在浏览器中输入一个网址并回车,浏览器会向服务器发送一个HTTP请求.服务器端程序接受这个请求,并对请求进行处理,然后发送一个回应.浏览器收到回应,再把回应的内容显示出来.这种 ...
- JSP+JavaBean+Servlet工作原理实例…
JSP+JavaBean+Servlet工作原理实例讲解 首先,JavaBean和Servlet虽都是Java程序,但是是完全不同的两个概念.引用mz3226960提出的MVC的概念,即M-model ...
- mxonline实战8,机构列表分页功能,以及按条件筛选功能
对应github地址:列表分页和按条件筛选 一. 列表分页 1. pip install django-pure-pagination 2. settings.py中 install ...
- JSP+JavaBean+Servlet+Oracle新增功能中对Date类型的字段的处理
Oracle库中userinfo表borth字段是Date类型,age年纪字段是int类型.age字段要根据borth来自动计算 先说一下我遇到的问题: insert into的时候遇到日期转换类型错 ...
- CRM-展示列表,分页功能
目录 一.admin (创建超级用户) 二.展示列表 三.分页(封装成类) 一.admin (创建超级用户) 1.注册: 1.创建一个超级管理员,使用如下命令: python manage.py ...
- 如何开发简单的javaweb项目,jsp+javabean+servlet
一.相关的软件下载和环境配置 1.下载并配置JDK. 2.下载eclipse. 3.下载并配置apache-tomcat(服务器). 4.下载MySQL(数据库). 5.下载Navicat for M ...
- JSP + JavaBean + Servlet实现MVC设计模式
1.流程图: 2.代码清单 数据库脚本: DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `userid` ) NOT NULL, `name` ...
- 【原】django实现列表分页功能
在view.py里添加分页查询方法: from django.http import JsonResponse from django.views.decorators.http import req ...
随机推荐
- WCF x509证书安装问题汇总
1.win7及以后系统可以使用certlm.msc打开localmachine的证书管理界面.win7前的版本需要使用mmc打开控制台,然后选择文件->添加删除管理单元->选择证书.2.部 ...
- OSPF协议详解
CCNP OSPF协议详解 2010-02-24 20:30:22 标签:CCNP 职场 OSPF 休闲 OSPF(Open Shortest Path Fitst,ospf)开放最短路径优先协议,是 ...
- jaccard similarity coefficient 相似度计算
Jaccard index From Wikipedia, the free encyclopedia The Jaccard index, also known as the Jaccard ...
- Hibernate 的dialect 大全
RDBMS 方言 DB2 org.hibernate.dialect.DB2Dialect DB2 AS/400 org.hibernate.dialect.DB2400Dialect DB2 OS3 ...
- 【JavaEE企业应用实战学习记录】sessionListener
package sanglp.servlet; import javax.servlet.ServletContext; import javax.servlet.annotation.WebList ...
- No Launcher activity found!
已经研究Android有几天了,刚开始写的代码说安装成功,但是在AVD没有显示.左看代码,右看代码,总是没找到错误, <application android:allowBackup=" ...
- 48-tree 命令总结
- Project Serve 2013部署方法
在线版Project2013部署手册 服务器环境要求 系统:windows server 2008r2.windows server2012x64 Sharepoint 2013 内存至少16GB,最 ...
- js中奇特的for循环写法
//正常的for循环 for(var i=0;i<10;i++){ console.log(i); } //输出:1,2,3……10 //简写 for(var i=10;i--;){ conso ...
- Android Bundle
#Bundle类介绍 Bundle主要用于传递数据:它保存的数据,是以key-value(键值对)的形式存在的. 我们经常使用Bundle在Activity之间传递数据,传递的数据可以是boolean ...