最近在做一个项目,用到了一个分页,于是动手写了个分页标签,先将代码贴出来,供大家交流,写的不好,请见谅!、

以下是java标签类,继承自SimpleTagSupport

  1. package com.lynn.oa.tag;
  2. import java.io.IOException;
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. import javax.servlet.jsp.JspException;
  6. import javax.servlet.jsp.JspWriter;
  7. import javax.servlet.jsp.tagext.SimpleTagSupport;
  8. import com.lynn.oa.util.Page;
  9. public class PageTag extends SimpleTagSupport {
  10. private Integer pageIndex;//当前页数
  11. private Integer pageCount;//总页数
  12. private String path;//页面链接
  13. private String param;//传入的参数
  14. //private List<Page> pageList;//显示的页号,一次显示10页,当前页位于中间第5的位置
  15. @Override
  16. public void doTag() throws JspException, IOException {
  17. JspWriter out = this.getJspContext().getOut();//指定输入流,用于页面输出分页信息、
  18. StringBuffer sb = new StringBuffer();//构建StringBuffer对象,用户拼接分页标签
  19. sb.append(this.getPageIndex());
  20. sb.append("/");
  21. sb.append(this.getPageCount());
  22. //显示当前页和总页数
  23. //如果当前页在第一页,则首页和上一页没有超链接
  24. if(this.pageIndex==1){
  25. sb.append("首页 上一页 ");
  26. }else{
  27. sb.append("<a href='");
  28. sb.append(this.path);
  29. sb.append("?");
  30. sb.append(this.param);
  31. sb.append("=");
  32. sb.append(1);
  33. sb.append("'>首页</a> ");
  34. sb.append("<a href='");
  35. sb.append(this.path);
  36. sb.append("?");
  37. sb.append(this.param);
  38. sb.append("=");
  39. sb.append(this.pageIndex-1);
  40. sb.append("'>上一页</a> ");
  41. }
  42. //下面的代码显示页码,当前页在中间位置,
  43. if(this.getPageCount()<=10){
  44. for (int i = 1; i <= this.getPageCount(); i++) {
  45. //如果页数小于等于10页,则全部显示
  46. if( i == pageIndex){//如果页码等于当前页,则该页数没有超链接
  47. sb.append("[");
  48. sb.append(i);
  49. sb.append("] ");
  50. }else{//否则给出超链接
  51. sb.append("<a href='");
  52. sb.append(this.path);
  53. sb.append("?");
  54. sb.append(this.param);
  55. sb.append("=");
  56. sb.append(i);
  57. sb.append("'>[");
  58. sb.append(i);
  59. sb.append("]</a> ");
  60. }
  61. }
  62. }else{//如果大于10页,则从当前页为中心只显示其中10页
  63. int index=1;
  64. if(this.pageIndex>4){//并且如果当前页大于4页,从当前页前4页开始显示10个页数
  65. for (int j = this.pageIndex-4;j<=this.getPageCount(); j++) {
  66. if(j==this.pageIndex){//如果页码等于当前页,则该页数没有超链接
  67. sb.append("[");
  68. sb.append(j);
  69. sb.append("] ");
  70. }else{//否则给定超链接
  71. sb.append("<a href='");
  72. sb.append(this.path);
  73. sb.append("?");
  74. sb.append(this.param);
  75. sb.append("=");
  76. sb.append(j);
  77. sb.append("'>[");
  78. sb.append(j);
  79. sb.append("]</a> ");
  80. }
  81. index++;
  82. if(index>10)//如果循环到10次则退出循环
  83. break;
  84. }
  85. }else{
  86. for (int i = 1; i <= this.getPageCount(); i++) {
  87. //如果页数小于等于10页,则全部显示
  88. if( pageIndex.equals(i)){//如果页码等于当前页,则该页数没有超链接
  89. sb.append("[");
  90. sb.append(i);
  91. sb.append("] ");
  92. }else{//否则给出超链接
  93. sb.append("<a href='");
  94. sb.append(this.path);
  95. sb.append("?");
  96. sb.append(this.param);
  97. sb.append("=");
  98. sb.append(i);
  99. sb.append("'>[");
  100. sb.append(i);
  101. sb.append("]</a> ");
  102. }
  103. index++;
  104. if(index>10)
  105. break;
  106. }
  107. }
  108. }
  1. //如果当前页是最后一页,则末页和下一页没有超链接
  2. if(this.pageIndex.equals(this.pageCount)){
  3. sb.append("下一页 末页 ");
  4. }else{
  5. sb.append("<a href='");
  6. sb.append(this.path);
  7. sb.append("?");
  8. sb.append(this.param);
  9. sb.append("=");
  10. sb.append(this.pageIndex+1);
  11. sb.append("'>下一页</a>");
  12. sb.append(" <a href='");
  13. sb.append(this.path);
  14. sb.append("?");
  15. sb.append(this.param);
  16. sb.append("=");
  17. sb.append(this.pageCount);
  18. sb.append("'>末页</a>");
  19. }
  20. //System.out.prIntegerln(sb.toString());
  21. //一下代码拼接转到第几页的js代码
  22. sb.append("<script type='text/javascript'>");
  23. sb.append("function getPage(){");
  24. sb.append("var pageIndex = document.getElementById('pageText').value;");
  25. sb.append("window.location.href='");
  26. sb.append(this.getPath());
  27. sb.append("?");
  28. sb.append(this.param);
  29. sb.append("=");
  30. sb.append("'+pageIndex;}");
  31. sb.append("</script>");
  32. sb.append(" 转到第<input type='text' name='pageText' id='pageText' style='width:15px;' />页");
  33. sb.append("<input type='button' name='pageBtn' value='GO' onclick='getPage()' />");
  34. sb.append("<script type='text/javascript'>");
  35. sb.append("$(function(){$('#pageSize').change(function(){var pageSize=$('#pageSize').val();window.location.href='");
  36. sb.append(this.path);
  37. sb.append("?");
  38. sb.append("pageIndex=1&index='+pageSize});});</script>");
  39. sb.append("每页显示<select id='pageSize'><option id='noone' value='1'>请选择</option>");
  40. sb.append("<option value='1'>1</option>");
  41. sb.append("<option value='5'>5</option>");
  42. sb.append("<option value='10'>10</option></select>页");
  43. out.print(sb);
  44. }
  45. public Integer getPageIndex() {
  46. return pageIndex;
  47. }
  48. public void setPageIndex(Integer pageIndex) {
  49. this.pageIndex = pageIndex;
  50. }
  51. public Integer getPageCount() {
  52. return pageCount;
  53. }
  54. public void setPageCount(Integer pageCount) {
  55. this.pageCount = pageCount;
  56. }
  57. public String getPath() {
  58. return path;
  59. }
  60. public void setPath(String path) {
  61. this.path = path;
  62. }
  63. public String getParam() {
  64. return param;
  65. }
  66. public void setParam(String param) {
  67. this.param = param;
  68. }
  69. public static void main(String[] args) {
  70. PageTag pt = new PageTag();
  71. pt.setPageIndex(13);
  72. pt.setPageCount(13);
  73. //pt.setPageList(pageList)
  74. pt.setPath("index.jsp");
  75. pt.setParam("pageIndex");
  76. try {
  77. pt.doTag();
  78. } catch (JspException e) {
  79. // TODO Auto-generated catch block
  80. e.printStackTrace();
  81. } catch (IOException e) {
  82. // TODO Auto-generated catch block
  83. e.printStackTrace();
  84. }
  85. }

tld文件如下:

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <taglib xmlns="http://java.sun.com/xml/ns/javaee"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
  5. version="2.1">
  6. <description>JSTL 1.1 core library</description>
  7. <display-name>JSTL core</display-name>
  8. <tlib-version>1.0</tlib-version>
  9. <short-name>mt</short-name>
  10. <uri>http://www.lynn88.com/jsp/jstl/pagetag</uri>
  11. <tag>
  12. <description>
  13. Catches any Throwable that occurs in its body and optionally
  14. exposes it.
  15. </description>
  16. <name>page</name>
  17. <tag-class>com.lynn.oa.tag.PageTag</tag-class>
  18. <body-content>empty</body-content>
  19. <attribute>
  20. <name>pageIndex</name>
  21. <required>true</required>
  22. <rtexprvalue>true</rtexprvalue>
  23. <type>java.lang.Integer</type>
  24. </attribute>
  25. <attribute>
  26. <name>pageCount</name>
  27. <required>true</required>
  28. <rtexprvalue>true</rtexprvalue>
  29. <type>java.lang.Integer</type>
  30. </attribute>
  31. <attribute>
  32. <name>path</name>
  33. <required>true</required>
  34. <rtexprvalue>true</rtexprvalue>
  35. <type>java.lang.String</type>
  36. </attribute>
  37. <attribute>
  38. <name>param</name>
  39. <required>true</required>
  40. <rtexprvalue>true</rtexprvalue>
  41. <type>java.lang.String</type>
  42. </attribute>
  43. </tag>
  44. </taglib>

java超强分页标签演示的更多相关文章

  1. Java自定义分页标签的实现

    主要字段含义: 页号 pagaNo页面大小 pageSize总记录条数 recordCount计算本次一共分多少页 myPageSize页号显示开始 start 页号显示结束 end PageTag需 ...

  2. SSH自定义分页标签

    本文参考文章:http://blog.csdn.net/qjyong/article/details/3240303 一.标签处理类: package cn.conris.sys.form; impo ...

  3. 自定义分页标签,并使分页标签能获得url中的参数

    如题,要实现一个分页功能,其次,要让分页标签“智能一点”,在分页时能自动带上url后面的参数 <tag> <description>分页标签</description&g ...

  4. Struts2自定义标签4自定义分页标签

    第一步:webroot/web-inf下的str.tld文件 <?xml version="1.0" encoding="UTF-8"?> < ...

  5. NET Core-TagHelper实现分页标签

    这里将要和大家分享的是学习总结使用TagHelper实现分页标签,之前分享过一篇使用HtmlHelper扩展了一个分页写法地址可以点击这里http://www.cnblogs.com/wangrudo ...

  6. Java 动态分页类

     动态分页类: Cls_page.java package pagination; public class Cls_page { private int nums;// 总条目数 private i ...

  7. Java自定义简单标签

     Java自定义简单标签可以方便的在页面输出信息,并且对于权限的控制,和对于Jsp标签和servlet代码的分离有着很好的作用. 下面将以权限的控制为例自定义一个标签: 一.标签类型 <wxt: ...

  8. java把html标签字符转普通字符(反转换成html标签)(摘抄)

    下面是java把html标签字符转换,我用了spring 包中的 org.springframework.web.util.HtmlUtils 了解了源代码并且进步了使用,发现写得真不错...同时也可 ...

  9. LeetCode第[18]题(Java):4Sum 标签:Array

    题目难度:Medium 题目: Given an array S of n integers, are there elements a, b, c, and d in S such that a + ...

随机推荐

  1. Can't connect to X11 window server using 'localhost:10.0' as the value of the DISPLAY variable.

    刚刚在一台Linux服务器上安装了jdk和Tomcat,然后部署了一个web项目,在项目中有个添加图片的功能,保存图片时报错 org.springframework.web.util.NestedSe ...

  2. HDU 5536--Chip Factory(暴力)

    Chip Factory Time Limit: 18000/9000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)T ...

  3. 异常笔记:Hadoop异常 namenode.NameNode: Encountered exception during format

    00:53:47,977 WARN namenode.NameNode: Encountered exception during format: java.io.IOException: Canno ...

  4. HTML5开篇定义(更新中)

    以下介绍的两种属性是为后面的属性支持左铺垫,大概一看就OK了. 通用属性 id 用于为HTML元素指定唯一标识 style 用于为HTML元素指定CSS指定样式 class 用于匹配CSS样式的cla ...

  5. 「PHP」工厂方法模式

    引言   所属:创建型模式,常用设计模式之一 工厂模式分为:简单工厂模式.工厂方法模式.静态工厂模式.抽象工厂模式. 下面为工厂方法模式. 参考资料: <大话设计模式>程杰   模式概述 ...

  6. ruby中的respond to ?用法

    今天写脚本,遇到了这个函数,遂搜索及阅读相关代码,整理如下: respond_to 是判断是否是某个类型的方法,比如: ar = "ss" p ar.respond_to?(:to ...

  7. 第6天 Java基础语法

    第6天 Java基础语法 今日内容介绍 自定义类 ArrayList集合 引用数据类型(类) 引用数据类型分类 提到引用数据类型(类),其实我们对它并不陌生,如使用过的Scanner类.Random类 ...

  8. Git使用列表(四)

    最近,由于自己的一个项目,导致自己的关于自己的要使用Git的很多的命令,突然发现自己的git的还有许多不知道的东西 不过,在这个工作的过程中,也发现自己的一些很大的缺陷,就是自己题目理解力有限,明明就 ...

  9. NoSQL入门第三天——Redis配置文件与持久化

    一.解析Redis配置文件redis.conf (Linux下配置多于编码) 1.它在哪 由于我是在root的家目录下载安装的,默认的安装位置就是: conf就在这里: 根据经验,出厂的conf永远不 ...

  10. 20145234黄斐《Java程序设计》第八周学习总结

    教材学习内容总结 第十五章部分 - 通用API 通用API 日志: 日志对信息安全意义重大,审计.取证.入侵检测等都会用到日志信息 日志API Logger: 注意无法使用构造方法生成Logger对象 ...