Java自定义分页标签的实现
主要字段含义:
页号 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(" 共<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>页: ");
//防止页面越界的处理
if(this.pageNo > myPageSize){
this.pageNo = myPageSize;
}
if(this.pageNo < 1){
this.pageNo = 1;
}
//当前页为第一页时,则上一页不能显示超链接
if(this.pageNo == 1){
tagContent.append("<span class='disabled'>« 上一页</span>");
}else{
//当前页不为第一页时,则进行页面链接处理
tagContent.append("<a href='javascript:turnOverPage(")
.append((pageNo - 1)).append(")'>« 上一页</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("…/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("…/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'>下一页 »").append("</span>/r/n");
}else{
//下一页的超链接可以使用
tagContent.append("<a herf='javascript:turnOverPage(").append((pageNo + 1)).append(")'>下一页 »</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自定义分页标签的实现的更多相关文章
- Struts2自定义标签4自定义分页标签
第一步:webroot/web-inf下的str.tld文件 <?xml version="1.0" encoding="UTF-8"?> < ...
- Java自定义简单标签
Java自定义简单标签可以方便的在页面输出信息,并且对于权限的控制,和对于Jsp标签和servlet代码的分离有着很好的作用. 下面将以权限的控制为例自定义一个标签: 一.标签类型 <wxt: ...
- SSH自定义分页标签
本文参考文章:http://blog.csdn.net/qjyong/article/details/3240303 一.标签处理类: package cn.conris.sys.form; impo ...
- 自定义分页标签,并使分页标签能获得url中的参数
如题,要实现一个分页功能,其次,要让分页标签“智能一点”,在分页时能自动带上url后面的参数 <tag> <description>分页标签</description&g ...
- java超强分页标签演示
最近在做一个项目,用到了一个分页,于是动手写了个分页标签,先将代码贴出来,供大家交流,写的不好,请见谅!. 以下是java标签类,继承自SimpleTagSupport package com.lyn ...
- Django 中的自定义分页标签
目录结构: 1.在应用下,migrations的同级目录创建templatetags目录(主要两个文件,包含__init__.py) 2.创建分页标签(pagetag.py) #!/usr/bin/e ...
- (转)java web自定义分页标签
转载至http://liuxi1024.iteye.com/blog/707784 效果如图: 1.JSP规范1.1版本后增加了自定义标签库.实现自定义标签的步骤 (1)开发自定义标签处理类. (2) ...
- NET Core-TagHelper实现分页标签
这里将要和大家分享的是学习总结使用TagHelper实现分页标签,之前分享过一篇使用HtmlHelper扩展了一个分页写法地址可以点击这里http://www.cnblogs.com/wangrudo ...
- [原创]java WEB学习笔记40:简单标签概述(背景,使用一个标签,标签库的API,SimpleTag接口,创建一个自定义的标签的步骤 和简单实践)
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
随机推荐
- SPSS统计功能与模块对照表
SPSS统计功能 - 应用速查表第一列为统计方法,中间为统计功能,最后一列为所在模块 1 ANOVA Models(单因素方差分析:简单因子) : 摘要 描述 方差 轮廓 - SPSS Base 2 ...
- java 对象占用内存查看 以及JVM级别 方法修改等
public interface Instrumentation 此类提供检测 Java 编程语言代码所需的服务.检测是向方法中添加字节码,以搜集各种工具所使用的数据.由于更改完全是进行添加,所以这些 ...
- 要胀爆的Angular1.0
尝试从http请求上遏制缓存: http://blog.csdn.net/u010039979/article/details/54376856 if (!$httpProvider.defaults ...
- CrtmpServer支持Android与IOS进行RTMP直播遇到的_checkbw问题
在进行移动端视频直播项目时遇到的问题.手机端在推的流时的是没问题的,主要如今是IOS和安卓连接CRtmpServer后进行播放时checkBW过不了,出现异常:NetConnection.Call.F ...
- iOS 企业版 安装失败 原因
首先要吐槽下国内的论坛水分略多,以下问题大多是查询stackoverflow等论坛解决的.推荐一款软件,Log Guru,用来查看app安装时的系统日志,很多问题要看日志才知道错误点. 1.首先有几 ...
- iphone怎么检测屏幕是否被点亮 (用UIApplication的Delegate)
本文转载至 http://gaohaijun.blog.163.com/blog/static/176698271201161524857373/ 问题:那位能说一下怎么能检测到iphone ...
- 我的Android进阶之旅------>Android之动画之Frame Animation实例
============================首先看看官网上关于Frame animation的介绍================================ 地址:http://de ...
- ABAP操作EXCEL (号称超级版)
[转自http://www.cnblogs.com/VerySky/articles/2170014.html] *------------------------------------------ ...
- sprintf在51单片机中的使用
sprintf在51单片机中的使用 unsigned char ch20_str[4]; unsigned char ch2o_m_str[6]; ch2o = 123; ch2o_m = 23456 ...
- 每天一个Linux命令(16)which命令
which命令用于查找并显示给定命令的绝对路径. 环境变量PATH中保存了查找命令时需要遍历的目录.which指令会在环境变量$PATH设置的目录里查找符合条件的文件.也就是说,使用which命令,就 ...