主要字段含义:

页号  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. table中tr的display属性在火狐中显示不正常,IE中显示正常

    最近在作项目的时候碰到一个问题,就是需要AJAX来交互显示<tr> </tr> 标签内的东西,按照常理,对于某一单元行需要显示时,使用:display:block属性,不需要显 ...

  2. Java 学习 day07

    01-面向对象(继承-概述).avi package myFirstCode; /* 将学生和工人的共性描述提取出来,单独进行描述, 只要让学生和工人与单独描述的这个类有关系,就可以了. 继承: 1. ...

  3. vue router-link子级返回父级页面

    vue-router嵌套路由,从二级路由跳转到一级路由时,间歇性导致一级路由重叠 解决方法: 1.使用this.$router.push跳转

  4. python login form

    import time from selenium import webdriver browser = webdriver.Chrome() wait_time = 1 USER = 'xl.fen ...

  5. LookAndFeelInfo

    在读zap源码的时候碰到:UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());以下来自百度知道UIManager.s ...

  6. 常见数据挖掘算法的Map-Reduce策略(1)

           大数据这个名词是被炒得越来越火了,各种大数据技术层出不穷,做数据挖掘的也跟着火了一把,呵呵,现今机器学习算法常见的并行实现方式:MPI,Map-Reduce计算框架,GPU方面,grap ...

  7. 读a paper of ICCV 2017 : Areas of Attention for Image Captioning

    前言废话,作者说把代码公布在gitub上,但是迟迟没有公布,我发邮件询问代码情况,邮件也迟迟不回,表示很尴尬..虽然种种这些,但是工作还是好工作,这个没的黑,那我们今天就来详细的介绍这篇文章. 导论: ...

  8. shell编程3 ---流程控制语句

    shell编程流程控制语句 一.if流程控制语句 1.单分支if条件判断语句 if [  条件判断式 ]:then     或者   if[ 条件判断式 ] 程序                   ...

  9. flex TweenLite

    本贴已在 AS天地会转发,大家可以参考:http://bbs.actionscript3.cn/viewthread.php?tid=11090&pid=91142&page=1&am ...

  10. CSS3垂直图标菜单

    在线演示 本地下载