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

简介:

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

思路:
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 51CTO博客,原文链接:http://blog.51cto.com/aiilive/841127,如需转载请自行联系原作者

相关文章
|
6天前
|
存储 自然语言处理
平台设计-代码字段与标签
在平台里描述对象的属性可以使用代码和标签
|
1月前
|
供应链 搜索推荐
偏好类标签支持自定义统计方式,标签场景覆盖更广
在个性化营销场景,零售商必须理解顾客的行为才能更准确的预测客户需求,优化库存管理、制定营销策略,并提供个性化的购物体验,然而偏好类标签的加工不仅仅是简单的属性出现频次或最大值的统计,Dataphin V4.0版本新增了自定义统计的方式加工偏好标签,通过简单的配置即可完成复杂的标签加工场景。
|
3月前
|
API
uniapp开启蓝牙并判断搜索内容的方法
uniapp开启蓝牙并判断搜索内容的方法
56 0
|
8月前
|
前端开发 安全 JavaScript
突破常规的前端技巧与方法(一)
突破常规的前端技巧与方法(一)
54 0
|
8月前
|
JSON JavaScript 前端开发
突破常规的前端技巧与方法(二)
突破常规的前端技巧与方法(二)
29 0
|
8月前
|
JavaScript 前端开发 测试技术
突破常规的前端技巧与方法(四)
突破常规的前端技巧与方法(四)
48 0
|
7月前
|
SQL 存储 数据库连接
自定义通用分页标签一行代码完成分页效果(内含源码)(上)
自定义通用分页标签一行代码完成分页效果(内含源码)
23 0
|
7月前
|
Java 数据处理 计算机视觉
自定义通用分页标签一行代码完成分页效果(内含源码)(下)
自定义通用分页标签一行代码完成分页效果(内含源码)(下)
24 0
|
8月前
|
前端开发 JavaScript 搜索推荐
突破常规的前端技巧与方法(三)
突破常规的前端技巧与方法(三)
137 0
突破常规的前端技巧与方法(三)
|
存储 开发框架 前端开发
ModStartCMS v5.5.0 页面标签支持,用户逻辑优化
ModStart 是一个基于 Laravel 模块化极速开发框架。模块市场拥有丰富的功能应用,支持后台一键快速安装,让开发者能快的实现业务功能开发。