主要字段含义:

页号  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. validate插件深入学习-03validate()方法配置项

    validate()方法配置项 rules 定义校验规则 messages 定义提示信息 上面这两个已经介绍过了 rules里隐藏的属性depends,只有符合条件(返回true)的时候才会执行 su ...

  2. 21)pom 中的缺省值(default properties)

    1 引言 项目中build 时用到了maven-jar-plugin ,其中有一个 ${project.build.directory} <plugin> <artifactId&g ...

  3. Android打包签名

    Ⅰ.用jdk和sdk自带工具打包签名 a.把jdk下的keytool.exe和jarsigner.exe所在目录(两个工具在同一目录) 添加到环境变量path 1)新建环境变量package,pack ...

  4. c语言开发手机通讯录

    // //  main.c //  手机通讯录 // //  Created by Kevin-Dfg on 16/4/19. //  Copyright © 2016年 Kevin-Dfg. All ...

  5. mingw fbx sdk /浮点数精度

    接下来要做一个linux下的程序了. 下载linux version     fbx sdk tar zxvf ...gz 按照安装说明 提升权限并没什么用 还是,cannot execute bin ...

  6. Codeforces4D - Mysterious Present(LIS)

    题目大意 给你一张宽为w,长为h的的贺卡,然后给你n个信封,每个信封宽为wi,长为hi,问你最多能在贺卡上嵌套多少个信封,如果某个信封i如果能够装在信封j里,当且仅当w[i]<w[j]& ...

  7. ecshop安全方面的一些参考建议

    一,ecshop安装,其实很简单,只要一直下一步下一步点击即可,这样总是没有错的,因为官方不可能给我们一个有问题的程序,尽量从简即可. 请注意一下两点 A:在安装ecshop的时候,不要将所有文件都设 ...

  8. jQuery 事件冒泡

    1 . 什么是冒泡 在页面上可以有多个事件,也可以多个元素响应同一个事件.假设网页上有两个元素,其中一个元素嵌套在另一个元素里,并且都被绑定了 click 事件,同时<body>元素上也绑 ...

  9. SpringBoot 集成数据库连接池Druid

    1.pom.xml依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>druid< ...

  10. ThreadLocalMap里Entry为何声明为WeakReference?

    Java里,每个线程都有自己的ThreadLocalMap,里边存着自己私有的对象.Map的Entry里,key为ThreadLocal对象,value即为私有对象T.在spring MVC中,常用T ...