文档章节

自定义分页标签模拟谷歌模式

secondriver
 secondriver
发布于 2015/09/17 09:23
字数 900
阅读 4
收藏 0

自定义标签分页,对于分页的显示方式有很多,简单的模拟一下谷歌的分页方式。

思路:
1.显示的数字个数可以设置,通过点击时要改变的数字个数决定
2.点击显示记录中的中间记录的前面的数字时记录信息不改变
3.点击显示记录中的中间记录的后面的数字时被点击的数字居中显示,并且显示记录更新
4.当前显示记录为最顶信息则不显示上一页,当前显示记录为最末信息则不显示下一页

第一步:创建一个自定义标签的标签类


  
  1. 分页标签的标签类:  
  2. import javax.servlet.jsp.JspException;  
  3. import javax.servlet.jsp.tagext.TagSupport;  
  4.  
  5. import java.io.IOException;  
  6. import java.text.MessageFormat;  
  7.  
  8. public class DivPageByNumber extends TagSupport {  
  9.     // 显示的页面的url;  
  10.     private String url;  
  11.     // 显示的页码  
  12.     private int page;  
  13.     // 要显示的页码数  
  14.     private int totalPages;  
  15.     // 每次改变的页码数  
  16.     private int changePages;  
  17.     private String upPage="上一页";  
  18.     private String nextPage="下一页";  
  19.  
  20.     /**  
  21.      * 标签开始执行,该标签没有标签体  
  22.      */ 
  23.     @Override 
  24.     public int doStartTag() throws JspException {  
  25.         int indexStart = page - changePages;  
  26.         int indexEnd = page + changePages;  
  27.         if (indexStart <=1) {  
  28.             indexStart = 1;  
  29.         }  
  30.         if (indexEnd > totalPages) {  
  31.             indexEnd = totalPages;  
  32.         }  
  33.         /**  
  34.          * 如果显示的页面是第一页则不用显示下一页  
  35.          */ 
  36.         if(indexStart>1){  
  37.             String [] linkUp={url, String.valueOf(indexStart-changePages) ,upPage};  
  38.             printLink(linkUp);  
  39.             printModify("&nbsp;&nbsp;&nbsp;");  
  40.         }  
  41.         /**  
  42.          *显示输出的的数字的个数包含首尾数字所以一次显示的数字个数是一次改变的数字数加1  
  43.          */ 
  44.         for (int i = indexStart; i <= indexEnd; i++) {  
  45.             String[] object = { url, String.valueOf(i), String.valueOf(i) };  
  46.             printLink(object);  
  47.             printModify("&nbsp;&nbsp;&nbsp;");  
  48.         }  
  49.         /**  
  50.          * 如果显示的页面是最后一页,则不用显示下一页  
  51.          */ 
  52.         if(indexEnd<totalPages){  
  53.             String [] linkNext={url, String.valueOf(indexEnd+changePages) ,nextPage};  
  54.             printLink(linkNext);  
  55.         }  
  56.  
  57.         return super.doStartTag();  
  58.     }  
  59.  
  60.     /**  
  61.      * 向页面输出每一页的数字连接  
  62.      * @param object  
  63.      */ 
  64.     private void printLink(String...object) {  
  65.         String linkString = "<a href={0}?page={1}>{2}</a>";  
  66.         String divPageString = MessageFormat.format(linkString, object);  
  67.         try {  
  68.             pageContext.getOut().write(divPageString);  
  69.         } catch (IOException e) {  
  70.             e.printStackTrace();  
  71.         }  
  72.     }  
  73.  
  74.     /**  
  75.      * 修饰输出  
  76.      * @param stringModify  
  77.      */ 
  78.     public void printModify(String stringModify){  
  79.         try{  
  80.             pageContext.getOut().write(stringModify);  
  81.         }catch(IOException e){  
  82.             e.printStackTrace();  
  83.         }  
  84.     }  
  85.       
  86.     public String getUrl() {  
  87.         return url;  
  88.     }  
  89.  
  90.     public void setUrl(String url) {  
  91.         this.url = url;  
  92.     }  
  93.  
  94.     public int getPage() {  
  95.         return page;  
  96.     }  
  97.  
  98.     public void setPage(int page) {  
  99.         this.page = page;  
  100.     }  
  101.  
  102.     public int getTotalPages() {  
  103.         return totalPages;  
  104.     }  
  105.  
  106.     public void setTotalPages(int totalPages) {  
  107.         this.totalPages = totalPages;  
  108.     }  
  109.  
  110.     public int getChangePages() {  
  111.         return changePages;  
  112.     }  
  113.  
  114.     public void setChangePages(int changePages) {  
  115.         this.changePages = changePages;  
  116.     }  
  117.  

第二步:配置tld文件

 


  
  1. 配置tld文件,添加自定义标签  
  2.     <tag>  
  3.         <name>divPageNumber</name>  
  4.         <tag-class>xiao.zhang.tag.DivPageByNumber</tag-class>  
  5.         <body-content>jsp</body-content>          
  6.         <attribute>  
  7.             <name>url</name>  
  8.             <required>true</required>  
  9.             <rtexprvalue>true</rtexprvalue>  
  10.         </attribute>  
  11.         <attribute>  
  12.             <name>page</name>  
  13.             <required>true</required>  
  14.             <rtexprvalue>true</rtexprvalue>  
  15.         </attribute>  
  16.         <attribute>  
  17.             <name>totalPages</name>  
  18.             <required>true</required>  
  19.             <rtexprvalue>true</rtexprvalue>  
  20.         </attribute>  
  21.         <attribute>  
  22.             <name>changePages</name><!--每次单击居中数字后面的数字时要改变的数字个数-->  
  23.             <required>true</required>  
  24.             <rtexprvalue>true</rtexprvalue>  
  25.         </attribute>  
  26.     </tag>  

配置其他环境:如果tld文件不在/WEB-INF/目录下则要在web.xml文件中添加自定义标签库的引用信息
根据tld中的信息添加:
  


  
  1. <jsp-config>  
  2.    <taglib>  
  3.     <taglib-uri>http://aiilive.blog.51cto.com/</taglib-uri>  
  4.     <taglib-location>/WEB-INF/tag.tld</taglib-location>  
  5.    </taglib>  
  6.   </jsp-config> 

实现的效果还行,就是后台数据库的处理方面要下功夫了。 

 

 

 分页技术在各种各样的网站上都随处看见,而且风格,显示,实现方式都不太一样
对于分页而言其本身意义并不大。
  但是对于每一页显示的信息而言,好的分页实现机制可以:
  减少数据库的访问次数;
  加快页面的数据的加载调高访问速度;
  根据用户的需要而进行数据的显示从而减少不必要的数据库访问。
  等等


  分页技术的核心还是在于数据库中的数据如何根据页面的请求更加有效,快速返回
给用户请求。

本文出自 “野马红尘” 博客,谢绝转载!

© 著作权归作者所有

secondriver
粉丝 10
博文 229
码字总数 233821
作品 0
广州
程序员
私信 提问
值得推荐的节省chrome内存的浏览器扩展程序有哪些?

不知道从什么时候开始,chrome浏览器就这样不知不觉的超过IE浏览器成为全球第一大浏览器。我们在赞赏chrome浏览器流畅的速度时,更多的是对其chrome插件功能的赞赏。但是我们也发现了一个致命...

TheBeauty2016
2017/05/25
0
0
一个基于jQuery的web管理系统单页响应式设计的感受

很多管理系统都是单个浏览器页面的,利用一些tab模拟多标签,嵌入iframe来运行页面应用。 我之前的想法,不采用iframe,只是用了jQueryUI的tab分页,一个页面应用是可以调用其他应用的,每个...

蓝水晶飞机
2015/04/20
626
1
做项目后的一点小收获

分页的使用: a.当一个页面只有类别一个分页的时候,直接使用CMS自带的分页功能既可实现; b.当一个页面有多个分类的时候,如:一个父级栏目下面两个或者多个二级子栏目,每个子栏目 下面又有...

笨小熊
2016/03/15
152
0
知识zswin/zswin

zswin社交类博客系统2.5 版本号20150127 官网地址:zswin.cn 不仅仅是个博客,可以用它来搭建各类社交系统! 简洁的前台采用bootstrap3.3.0 制作响应式模板,手机访问效果不错。 利用标签和插...

知识zswin
2014/11/21
0
0
简洁而强大的下拉分页选择器 v-selectpage

v-selectpage 简洁而强大的下拉分页选择器 基于 Vue2 强大的选择器, 可分页的列表或表格展现形式, 使用标签形式的多选模式, 国际化 i18n 和服务端数据源支持 文档、实例 请浏览 English site...

孟飞阳
2018/07/27
756
0

没有更多内容

加载失败,请刷新页面

加载更多

Nginx 快速安装详解

一、Nginx Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамбле...

网络小虾米
8分钟前
3
0
技术分享 | slave_relay_log_info 表认知的一些展开

作者:胡呈清 slave_relay_log_info 表是这样的: mysql> select * from mysql.slave_relay_log_info\G *************************** 1. row *************************** Number_of_lin......

爱可生
10分钟前
2
0
nginx配置http访问自动跳转到https

server {listen 80;server_name www.域名.com;rewrite ^(.*) https://$server_name$1 permanent;}server {listen 443;server_name www.域名.com;root /home/www;ssl on;......

很好亦平凡ms
10分钟前
2
0
SpreadJS:一款中国研发的类Excel开发工具,功能涵盖Excel的 95% 以上

Excel 作为一款深受用户喜爱的电子表格工具,借助其直观的界面、出色的计算性能、数据分析和图表,已经成为数据统计领域不可或缺的软件之一。 基于Excel对数据处理与分析的卓越表现,把Excel...

葡萄城技术团队
10分钟前
2
0
用javafx框架tornadofx做了个天气预报的程序

class WeatherApp : App(WeatherView::class)class WeatherView : View("十五天天气预报") { val weatherVM: WeatherViewModel by inject() val controller: WeatherController by......

oschina4cyy
14分钟前
2
1

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部