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 ...
随机推荐
- JS之获取属性总结
嗨,我是沐晴,今天来说说JS中关于获取属性的一些方法和区别.闲话不说,来正题. 首先什么是属性呢,比如input标签,标签中的value id type style等,这些就是属性.我们JS获取属性一 ...
- 高仿Windows Phone QQ登录界面
给 TextBox文本框前添加图片 扩展PhoneTextBox:添加一个类"ExtentPhoneTextBox"继承 PhoneTextBox ,在"ExtentPh ...
- MATLAB中的set函数
1.MATLAB给每种对象的每一个属性规定了一个名字,称为属性名,而属性名的取值成为属性值.例如,LineStyle是曲线对象的一个属性名,它的值决定着线型,取值可以是'-' .':'.'-.'.'- ...
- Webservice学习
参考博客1: http://www.cnblogs.com/lzhp/archive/2013/01/13/2858559.html 参考博客2:http://blog.csdn.net/shilei ...
- linux 常用命令总结
PS命令: 1.命令格式: ps[参数] 2.命令功能: 用来显示当前进程的状态 3.命令参数: a 显示所有进程 -a 显示同一终端下的所有程序 -A 显示所有进程 c 显示进程的真实名称 -N ...
- C/C++中NULL的涵义
参考:百度知道NULL表示空指针,用于表示一个无效的指针,它的值为0(早期C语言的实现中可能有非0空指针,现在已经不用).对指针置NULL即标记指针无效,避免“野指针”的恶果.NULL在C/C++标准 ...
- javascript 对象实例
创建对象: var o = new Objct(); //创建一个空对象 var o = {}; var a = new Array(); //创建一个空数组 var a = []; var d = ...
- Elasticsearch 1.X 版本Java插件开发
接上一篇<Elasticsearch 2.X 版本Java插件开发简述> 开发1.X版本elasticsearch java插件与2.X版本有一些不同,同时在安装部署上也有些不同,主要区别 ...
- yum命令mysql,jdk,tomcat
一.首先使用Yum list available xxx命令罗列出远程仓库里面可以安装的包 1.列出可以安装的java包 yum list available java* 输出如下: 2.列出可以安装 ...
- C#-面向对象的三大特性——多态(虚方法与重写、抽象类、接口)
多态 同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果.在运行时,可以通过指向基类的指针,来调用实现派生类中的方法. 编译时的多态性:编译时的多态性是通过重载来实现的.对于非虚的成员来说 ...