主要字段含义:

页号  pagaNo
页面大小   pageSize
总记录条数   recordCount
计算本次一共分多少页   myPageSize
页号显示开始   start

页号显示结束   end

PageTag需要继承TagSupport类用于实现自定义标签。

import java.io.IOException;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport; public class PageTag extends TagSupport { /**
*
*/
private static final long serialVersionUID = 1L;
//页号 第几页
private int pageNo = 1;
//页面大小,每一页显示几条记录
private int pageSize = 5;
//分页操作后台响应类,后台响应servlet
private String url;
//总的记录条数,本次分页操作所有的记录总数
private int recordCount = 0;
@Override
public int doEndTag() throws JspException {
// TODO Auto-generated method stub
return super.doEndTag();
}
@Override
public int doStartTag() throws JspException {
// TODO Auto-generated method stub
//自定义标签的业务逻辑处理,使用分页的相关参数,组织分页标签的内容
StringBuilder tagContent = new StringBuilder();
//组织自定义分页标签的css样式表
tagContent
.append("<style type='text/scc'>")
.append(".pagination {padding:5px;float:right;font-size:12px;}")
.append(".pagination a, .pagination a:link, .pagination a:visited {padding:2px 5px;margin:2px;boder:1px solid #aaaadd;text-decoration:none;color:#006699;}")
.append(".pagination a:hover, .pagination a:active {border:1px solid #ff0000;font-weight: bold;background-color: #ff0000; color: #FFF;}")
.append(".pagination span.disabled {padding: 2px 5px;margin: 2px;border: 1px solid #eee; color: #ddd;}")
.append("</style>");
//自定义标签的标签体内容
tagContent.append("<div class='pagination'>");
if(this.recordCount == 0){
//没有查询到结果记录集,则提示没有显示数据
tagContent.append("<strong>没有可显示的项目</strong>/r/n");
}else{
//查询结果有显示数据时,则进行分页处理
tagContent.append("<form method='post' action='");
tagContent.append(this.getUrl());
tagContent.append("' name='qPagerForm'>");
//自定义标签的隐藏属性,用来进行页码变换时的表单数据:页码和页面大小
tagContent.append("<input type='hidden' name='pageNo' value='1'/>");
tagContent.append("<input type='hidden' name='pageSize' value='");
tagContent.append(this.getPageSize());
tagContent.append(" '/>");
tagContent.append("&nbsp;共<strong>");
tagContent.append(this.getRecordCount());
tagContent.append("</strong>项,<strong>");
//计算本次分一共有多少页:不足一页的也算作一页
int myPageSize = (int)Math.ceil((double)this.getRecordCount()/this.getPageSize());
tagContent.append(myPageSize);
tagContent.append("</strong>页:&nbsp;");
//防止页面越界的处理
if(this.pageNo > myPageSize){
this.pageNo = myPageSize;
}
if(this.pageNo < 1){
this.pageNo = 1;
}
//当前页为第一页时,则上一页不能显示超链接
if(this.pageNo == 1){
tagContent.append("<span class='disabled'>&laquo;&nbsp;上一页</span>");
}else{
//当前页不为第一页时,则进行页面链接处理
tagContent.append("<a href='javascript:turnOverPage(")
.append((pageNo - 1)).append(")'>&laquo;&nbsp;上一页</a>/r/n");
}
//如果前面页数过多,显示"..."
int start = 1;
if(this.pageNo > 4){
//在前面的页数大于4页情况下,从当前页的前一页开始显示,前面的页数使用...代替
start = this.pageNo - 1;
tagContent.append("<a herf='javascript:turnOverPage(1)'>1</a>/r/n");
tagContent.append("<a herf='javascript:turnOverPage(2)'>2</a>/r/n");
tagContent.append("&hellip;/r/n");
}
//显示当前页附近的页
int end = this.pageNo + 1;
//如果当前页为最后一页
if(end > myPageSize) {
//防止end记录的最后一页超出总页数
end = myPageSize;
}
for(int i = start; i <= end; i++){
if(pageNo ==i){
//当前页号不需要超链接
tagContent.append("<span class='current'>").append(i).append("</span>/r/n");
}else{
//当前页前后的几页需要加上超链接
tagContent.append("<a herf=''javascript:turnOverPage(").append(i)
.append(")'>").append(i).append("</a>/r/n");
}
}
//如果后面页数过多,显示"..."
if(end < myPageSize - 2){
//使用...替换
tagContent.append("&hellip;/r/n");
}
if(end < myPageSize - 1){
//刚好后面剩余页数为两页
tagContent.append("<a herf='javascript:turnOverPage(").append(myPageSize - 1).append(")'>")
.append(myPageSize - 1).append("</a>/r/n");
}
if(end < myPageSize){
//刚好后面的页数剩余一页
tagContent.append("<a herf='javascript:turnOverPage(").append(myPageSize).append(")'>").append(myPageSize).append("</a>/r/n");
}
//下一页处理
if(pageNo == myPageSize){
//如果当前页数为最后一页,则不需要超链接
tagContent.append("<span class='disabled'>下一页&nbsp;&raquo;").append("</span>/r/n");
}else{
//下一页的超链接可以使用
tagContent.append("<a herf='javascript:turnOverPage(").append((pageNo + 1)).append(")'>下一页&nbsp;&raquo;</a>/r/n");
}
tagContent.append("</from>");
//拼写js处理函数:当用户点击某一页时,需要将这一页的页码赋值给隐藏表单域,
//用来将其作为表单发送给分页响应的servlet
tagContent.append("<script language='javascript'>");
tagContent.append("function turnOverPage(no){");
tagContent.append("if(no>");
tagContent.append(myPageSize);
tagContent.append("){no=");
tagContent.append(myPageSize);
tagContent.append(";}");
tagContent.append("if(no<1){no=1;}");
tagContent.append("document.qPagerForm.pageNo.value=no;");
tagContent.append("document.qPagerForm.submit();");
tagContent.append("}");
tagContent.append("</script>");
tagContent.append("</div>");
}
//输出标签的内容到前台页面
try {
this.pageContext.getOut().write(tagContent.toString());
} catch (IOException e) {
//自定义标签输出错误
System.out.println("自定义标签输出错误:" + e.getMessage());
}
return SKIP_BODY;
} public int getPageNo() {
return pageNo;
}
public void setPageNo(int pageNo) {
this.pageNo = pageNo;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public int getRecordCount() {
return recordCount;
}
public void setRecordCount(int recordCount) {
this.recordCount = recordCount;
} }

分页的javascript函数

<script language='javascript'>
function turnOverPage(no){
if(no > pageSize){
no = pageSize;
}
if(no < 1){
no = 1;
}
document.qPagerForm.pageNo.value=no;
document.qPagerForm.submit();
}
</script>

Java自定义分页标签的实现的更多相关文章

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

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

  2. Java自定义简单标签

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

  3. SSH自定义分页标签

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

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

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

  5. java超强分页标签演示

    最近在做一个项目,用到了一个分页,于是动手写了个分页标签,先将代码贴出来,供大家交流,写的不好,请见谅!. 以下是java标签类,继承自SimpleTagSupport package com.lyn ...

  6. Django 中的自定义分页标签

    目录结构: 1.在应用下,migrations的同级目录创建templatetags目录(主要两个文件,包含__init__.py) 2.创建分页标签(pagetag.py) #!/usr/bin/e ...

  7. (转)java web自定义分页标签

    转载至http://liuxi1024.iteye.com/blog/707784 效果如图: 1.JSP规范1.1版本后增加了自定义标签库.实现自定义标签的步骤 (1)开发自定义标签处理类. (2) ...

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

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

  9. [原创]java WEB学习笔记40:简单标签概述(背景,使用一个标签,标签库的API,SimpleTag接口,创建一个自定义的标签的步骤 和简单实践)

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

随机推荐

  1. 【Atheros】Ath9k速率调整算法源码走读

    上一篇文章介绍了驱动中minstrel_ht速率调整算法,atheros中提供了可选的的两种速率调整算法,分别是ath9k和minstrel,这两个算法分别位于: drivers\net\wirele ...

  2. python高级-------python2.7教程学习【廖雪峰版】(四)

    2017年6月9日17:57:55 任务: 看完高级部分 笔记:1.掌握了Python的数据类型.语句和函数,基本上就可以编写出很多有用的程序了.2.在Python中,代码不是越多越好,而是越少越好. ...

  3. Java泛型的应用

    一.泛型类 package generics; /** * 泛型类,格式:public class 类名<泛型类型1, ...> * @author zhongfg * @date 201 ...

  4. 【BZOJ3316】JC loves Mkk 分数规划+单调队列

    [BZOJ3316]JC loves Mkk Description Input 第1行,包含三个整数.n,L,R.第2行n个数,代表a[1..n]. Output 仅1行,表示询问答案.如果答案是整 ...

  5. 【BZOJ4128】Matrix BSGS+hash

    [BZOJ4128]Matrix Description 给定矩阵A,B和模数p,求最小的x满足 A^x = B (mod p) Input 第一行两个整数n和p,表示矩阵的阶和模数,接下来一个n * ...

  6. Brain Network (medium)(DFS)

    H - Brain Network (medium) Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d &am ...

  7. linux后台开发必备技能

    一.linux和os: 1.命令:netstat tcpdump ipcs ipcrm  这四个命令的熟练掌握程度基本上能体现实际开发和调试程序的经验 2.cpu 内存 硬盘 等等与系统性能调试相关的 ...

  8. linux shell 中数组使用方法介绍

    linux shell在编程方面比windows 批处理强大太多,不管是在循环.运算.已经数据类型方面都是不能比較的. 以下是个人在使用时候,对它在数组方面一些操作进行的总结. 1.数组定义 [che ...

  9. foreign key

    http://sevenseacat.net/2015/02/24/add_foreign_key_gotchas.html https://robots.thoughtbot.com/referen ...

  10. NSAttributedStringKey

    NSFontAttributeName; //字体,value是UIFont对象 NSParagraphStyleAttributeName;//绘图的风格(居中,换行模式,间距等诸多风格),valu ...