web上的分页分析
 
在web编写中的经常会遇到,数据需要分页的情况。当数据量不是很大的时候。
 
可以直接使用js来分页。可以很好的提高性能。简化代码。数据量大的时候。还是需要使用java的分页类还处理。
 
今天我来分析下。分页中导航的显示效果的实现。
 
显示效果:
[页面总数小于等于10,全部显示,当前页特殊显示]
上一页  1   2   3   4   5   6   7   8   9   10   下一页
[页面总数大于10,部分显示,当前页特殊显示]
上一页  1   2   3   …   20   下一页       [当前页面为首页时,上一页不可用]
上一页  1   2   3   4    …   20   下一页
上一页  1   2   3   4   5    …   20   下一页
上一页  1   2   3   4   5   6   …   20   下一页
上一页  1   …    3     4    5    6    7     …  20  下一页
上一页  1   …   14   15  16  17  18    ...  20  下一页
上一页  1   …   15   16  17  18  19  20  下一页
上一页  1   …   16   17  18  19  20  下一页
上一页  1   …   17   18  19  20  下一页
上一页  1   …   18   19  20  下一页[当前页面为末页时,下一页不可用]
 
算法提取:
0.页码显示规则:
当前页为首页时不显示上一页;      上一页  1   2   3   …   20   下一页
当前页为尾页时不显示下一页;      上一页  1   …   17   18  19  20  下一页
1.页面总数(n)<=10 {
显示全部页码:上一页  1   2   3   4   5   6   7   8   9   10   下一页
}
2.页面总数(n) > 10 {
2.1     当前页码 <=  4 {
左侧显示所有 +  当前页码  +  右侧2个页码 + ... + 尾页
上一页  1   2   3   …   20   下一页
上一页  1   2   3   4    …   20   下一页
上一页  1   2   3   4   5    …   20   下一页
上一页  1   2   3   4   5   6   …   20   下一页
}
2.2      当前页码 > 4 且<= 页面总数(n) - 3 {
首页  + ... + 左侧2个页码  + 当前页码  + 右侧2个页码  + ...  +  尾页
上一页  1   …    3     4    5    6    7     …  20  下一页
上一页  1   …   14   15  16  17  18    ...  20  下一页
}
2.3      当前页码 > 页面总数(n) - 3 {
首页 + ... +  左侧2个页面 +  当前页码  +  右侧显示所有
上一页  1   …   15   16  17  18  19  20  下一页
上一页  1   …   16   17  18  19  20  下一页
上一页  1   …   17   18  19  20  下一页
上一页  1   …   18   19  20  下一页
}
}
 
 
 
下面我来把他修改成java语言。
[java]
 
public class PageTest {
 
public static String pageControl(int page,int count){
String strHtml = "";
 
if(page > 1){
strHtml += "上一页";
}
if(count <= 10){
for(int i = 1;i<=count;i++){
if(page == i){
strHtml+=" ["+i+"]";
}else{
strHtml+=" "+i;
}
}
}else{
if(page<4){
for(int i = page-1;i>0;i--){
strHtml+=" "+i;
}
strHtml+=" ["+page+"]";
strHtml+=" "+(page+1);
strHtml+=" "+(page+2);
strHtml+=" ...";
strHtml+=" "+count;
 
}
if(page>4 && (page<=count-3)){
strHtml+=" "+1;
strHtml+=" ...";
strHtml+=" "+(page-2);
strHtml+=" "+(page-1);
strHtml+=" ["+page+"]";
strHtml+=" "+(page+1);
strHtml+=" "+(page+2);
strHtml+=" ...";
strHtml+=" "+count;
 
}
if(page>count-3){
strHtml+=" "+1;
strHtml+=" ...";
strHtml+=" "+(page-2);
strHtml+=" "+(page-1);
strHtml+=" ["+page+"]";
for(int i = page+1;i<count;i++){
strHtml+=" "+i;
}
}
 
}
 
if(page < count){
strHtml += "下一页";
}
 
return strHtml;
}
 
public static void main(String[] args) {
System.out.println(PageTest.pageControl(6, 20));
}
}
[/java]
 
这个是分页导航的效果。需要对应的效果。可以自行修改。
 
 
写成js:

<%@ page language="java" pageEncoding="UTF-8" %>

<script type="text/javascript">
var sbPageString ="";
var displayNum = 10;//显示页面数量
var totalPages = ${pageCount}; //页面码数
var pageNumber = ${pagedVo.paging.pageNumber}; //当前页码
var startPage = 0; //首页
var endPage = 0; //最后页

if (totalPages <= displayNum) {
startPage = 1;
endPage = totalPages;
}/* else if (pageNumber <= (displayNum - 1) / 2) {
startPage = 1;
endPage = displayNum;
} else if (pageNumber >= totalPages - (displayNum - 1) / 2) {
startPage = totalPages - displayNum + 1;
endPage = totalPages;
} else {
startPage = pageNumber - (displayNum - 1) / 2;
endPage = pageNumber + (displayNum - 1) / 2;
} */
if(totalPages<=10){
if(totalPages==1||totalPages==0){

sbPageString = "<a href='javascript:void(0)' onclick='toPage("+1+")' style='background-color:#EFCFB6;'>" + 1 + "</a>";
}else{
sbPageString += "<a href='javascript:void(0)' class='first-child' onclick='toPage("+(pageNumber -1)+")' >上一页 <p></p></a>";
for(var i=1;i<=totalPages;i++){
if(i<pageNumber){
sbPageString += "<a href='javascript:void(0)' onclick='toPage("+i+")'>" + i + "</a>";
}else if(i==pageNumber){
sbPageString += "<a href='javascript:void(0)' onclick='toPage("+(pageNumber)+")' style='background-color:#EFCFB6;'>" + pageNumber + "</a>";
}else if(i>pageNumber){
sbPageString += "<a href='javascript:void(0)' onclick='toPage("+i+")'>" + i + "</a>";
}
}
sbPageString += "<a href='javascript:void(0)' class='first-child' onclick='toPage("+(pageNumber +1)+")'>下一页 <p class='dpl-paginator-arrow-right'></p></a>";
}
}
if(totalPages>10){
if(pageNumber!=1){
sbPageString += "<a href='javascript:void(0)' class='first-child' onclick='toPage("+(pageNumber -1)+")' >上一页 <p></p></a>";
}
if(pageNumber<=4){
for(var i=1;i<=parseInt(pageNumber);i++){
if(i!=pageNumber){
sbPageString += "<a href='javascript:void(0)' onclick='toPage("+i+")' >" + i + "</a>";}
if(i==pageNumber){
sbPageString += "<a href='javascript:void(0)' onclick='toPage("+(pageNumber)+")' style='background-color:#EFCFB6;'>" + pageNumber + "</a>";
}
}
sbPageString += "<a href='javascript:void(0)' onclick='toPage("+(pageNumber+1)+")'>" + (pageNumber+1) + "</a>";
sbPageString += "<a href='javascript:void(0)' onclick='toPage("+(pageNumber+2)+")'>" + (pageNumber+2) + "</a><span style='float:left;'>...</span>";

sbPageString += "<a href='javascript:void(0)' onclick='toPage("+totalPages+")'>" + totalPages + "</a>";

}
if(pageNumber>4&&pageNumber<=totalPages-3){
sbPageString += "<a href='javascript:void(0)' onclick='toPage("+1+")'>" + 1 + "</a><span style='float:left;'>...</span>";

sbPageString += "<a href='javascript:void(0)' onclick='toPage("+(pageNumber-2)+")'>" + (pageNumber-2) + "</a>";
sbPageString += "<a href='javascript:void(0)' onclick='toPage("+(pageNumber-1)+")'>" + (pageNumber-1) + "</a>";
sbPageString += "<a href='javascript:void(0)' onclick='toPage("+pageNumber+")' style='background-color:#EFCFB6;'>" + pageNumber + "</a>";
sbPageString += "<a href='javascript:void(0)' onclick='toPage("+(pageNumber+1)+")'>" + (pageNumber+1) + "</a>";
sbPageString += "<a href='javascript:void(0)' onclick='toPage("+(pageNumber+2)+")'>" + (pageNumber+2) + "</a><span style='float:left;'>...</span>";

sbPageString += "<a href='javascript:void(0)' onclick='toPage("+totalPages+")'>" + totalPages + "</a>";
}
if(pageNumber>totalPages-3){
sbPageString += "<a href='javascript:void(0)' onclick='toPage("+1+")'>" + 1 + "</a><span style='float:left;'>...</span>";

sbPageString += "<a href='javascript:void(0)' onclick='toPage("+(pageNumber-2)+")'>" + (pageNumber-2) + "</a>";
sbPageString += "<a href='javascript:void(0)' onclick='toPage("+(pageNumber-1)+")'>" + (pageNumber-1) + "</a>";
sbPageString += "<a href='javascript:void(0)' onclick='toPage("+pageNumber+")' style='background-color:#EFCFB6;'>" + pageNumber + "</a>";
for(var i=pageNumber+1;i<=totalPages;i++){
sbPageString += "<a href='javascript:void(0)' onclick='toPage("+i+")'>" + i + "</a>";
}
}
if(parseInt(pageNumber)!=totalPages){
sbPageString += "<a href='javascript:void(0)' class='first-child' onclick='toPage("+(pageNumber +1)+")' >下一页 <p></p></a>";
}
}

$(".yema").append(sbPageString);
</script>

javaweb分页思想的更多相关文章

  1. ASP.NET MVC 数据分页思想及解决方案代码

    作为一个程序猿,数据分页是每个人都会遇到的问题.解决方案更是琳琅满目,花样百出.但基本的思想都是差不多的. 下面给大家分享一个简单的分页器,让初学者了解一下最简单的分页思想,以及在ASP.NET MV ...

  2. javaweb分页查询实现

    Javaweb分页技术实现 分页技术就是通过SQL语句(如下)来获取数据,具体实现看下面代码 //分页查询语句 select * from 表名 where limit page , count; 和 ...

  3. Android 仿淘宝头条竖直跑马灯式新闻标题及“分页思想

    在淘宝App的首页中间位置,有一块小小的地方在不知疲倦地循坏滚动着头条标题(见下图的红框区域),这样的设计无疑能够在有限的手机屏幕上展示更丰富的内容.而实现这一功能需要用到的控件就是我在上一篇文章中提 ...

  4. crm 数据展示 和分页思想(一)

    1. 数据的展示 数据通过ORM查询出来 对象列表 QuerySet 1. 普通的字段 对象.字段名 ——> 数据库中的值 <td>{{ customer.phone }}</ ...

  5. 住javaWeb分页实现(模拟百度首页)

    本文来源于 http://blog.csdn.net/tjpu_lin/article/details/41050475 近期在开发一个项目,项目中有非常多数据展示的模块.所以要用到分页,网上搜了非常 ...

  6. Javaweb分页功能简单实现

    效果如下图 数据库中的数据                                                                页面效果 首先,创建一个通用类Page,代码及 ...

  7. JavaWeb分页显示内容之分页查询的三种思路(数据库分页查询)

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6134851.html 在开发过程中,经常做的一件事,也是最基本的事,就是从数据库中查询数据,然后在客户端显示出 ...

  8. javaweb分页的后端实现

    先上demo图 servlet实现部分: package servlet; import java.io.IOException; import java.util.List; import java ...

  9. ASP.NET MVC 简单的分页思想与实现

    首先我们通过VS创建一个空的基于Razor视图引擎的ASP.NET MVC3 Web应用程序,命名为JohnConnor.Web 对创建过程或Razor不太了解的看官,请移步 ASP.NET MVC ...

随机推荐

  1. Java并发编程--线程封闭(Ad-hoc封闭 栈封闭 ThreadLocal)

    线程封闭实现好的并发是一件困难的事情,所以很多时候我们都想躲避并发.避免并发最简单的方法就是线程封闭.什么是线程封闭呢?就是把对象封装到一个线程里,只有这一个线程能看到此对象.那么这个对象就算不是线程 ...

  2. Hibernate学习笔记--使用ThreadLocal

    参考资料: http://blog.sina.com.cn/s/blog_7ffb8dd5010146i3.html http://lavasoft.blog.51cto.com/62575/5192 ...

  3. QT creator中使用opencv

    最近要用到opencv做图像方面的东西,网上很多是用VS加opencv,但自己对VS不怎么喜欢,想用QT Creator.在网上搜索了很多资料,终于花了一天的时间,在QT Creator上能使用ope ...

  4. 递归转手工栈处理的一般式[C语言]

    是任意形式的递归,是化解的一般式. 主题所谓的“递归调用化解为栈处理”,意思是,将递归函数调用化解为“一个由stack_push stack_pop stack_top等函数调用组成的循环式子”.这里 ...

  5. elasticsearch 修改内存

    [elk@zjtest7-redis bin]$ cat elasticsearch.in.sh if [ "x$ES_MIN_MEM" = "x" ]; th ...

  6. 【转】Android通过JNI调用驱动程序(完全解析实例)

    原文网址:http://blog.csdn.net/ok138ok/article/details/6560875 要达到的目的:android系统中,用JAVA写界面程序,调用jni中间库提供的接口 ...

  7. bzoj1149

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1149 水题..... 直接BFS. #include<cstdio> #inclu ...

  8. TCP/IP 中文译名为传输控制协议/因特网互联协议,又叫网络通讯协议

    原文地址:http://hi.baidu.com/albyuyrgqgbbhoq/item/65006d2d002ab33195f62ba1 TCP/IP(Transmission Control P ...

  9. POJ3580---SuperMemo (Splay)

    各种操作,区间更新,求最值.翻转.插入.删除.当然是Splay这种神器了. 主要是 revolve这个操作,其实也就是3个区间翻转放到一块, 比如 REVOLVE x y T,T %= (y-x+1) ...

  10. js设计模式系列之(一)请节约你的请求-代理模式

    What’s the proxy pattern? 代理模式其实就是将违反单一性原则的类给抽离出来,尽量满足开放和封闭的原则. 相当于一个类的行为只是一种,但是你可以给这个类添加额外的行为.比如: 一 ...