package com.yiyuwanglu.basecore.page;
import java.io.IOException;
import java.io.Serializable;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.SimpleTagSupport;
public class Page extends SimpleTagSupport implements Serializable {
private static final long serialVersionUID = 1L;//序列号
private Integer current;//当前页码
private Long count;//记录总数
private Integer pageCount;//每页记录数
private String path;//页面链接
private String param;//传入的参数
private boolean notQueryCount = false;//为false在翻页时查询记录总数,默认false
public Page() {
this.current = 1; // 默认第一页
this.count = 0L; // 共多少条记录
this.pageCount = 10; // 默认每页10条记录
}
@Override
public void doTag() throws JspException, IOException {
int pageSize = (int) (this.count / this.pageCount + (this.count % this.pageCount > 0 ? 1 : 0));//共多少页
//显示当前页和总页数
JspWriter out = this.getJspContext().getOut();//指定输入流,用于页面输出分页信息
StringBuffer sb = new StringBuffer();//构建StringBuffer对象,用户拼接分页标签
sb.append("<div class=\"page\">");
sb.append("<ul>");
//如果当前页在第一页,则首页和上一页没有超链接
if (this.current == 1) {
sb.append("<li class=\"disabled\">首页</li><li class=\"disabled\">上一页</li>");
} else {
sb.append("<li><a href=\"");
sb.append(this.path);
sb.append("?current=");
sb.append(1);
if (this.param != null && !"".equals(this.param)) {
sb.append("&");
sb.append(this.param);
}
sb.append("\">首页</a></li>");
sb.append("<li><a href=\"");
sb.append(this.path);
sb.append("?current=");
sb.append(this.current - 1);
if (this.param != null && !"".equals(this.param)) {
sb.append("&");
sb.append(this.param);
}
sb.append("\">上一页</a></li>");
}
//下面的代码显示页码,当前页在中间位置
if (pageSize <= 10) {
for (int i = 1; i <= pageSize; i++) {
//如果页数小于等于10页,则全部显示
if (i == this.current) {//如果页码等于当前页,则该页数没有超链接
sb.append("<li class=\"current\">");
sb.append(i);
sb.append("</li>");
} else {//否则给出超链接
sb.append("<li><a href=\"");
sb.append(this.path);
sb.append("?current=");
sb.append(i);
if (this.param != null && !"".equals(this.param)) {
sb.append("&");
sb.append(this.param);
}
sb.append("\">");
sb.append(i);
sb.append("</a></li>");
}
}
} else {//如果大于10页,则从当前页为中心只显示其中10页
int index = 1;
if (this.current > 4) {//并且如果当前页大于4页,从当前页前4页开始显示10个页数
if (this.current + 4 >= pageSize) {//如果当前页+4 >= 总页数,最后10页全部显示出来
for (int j = pageSize - 9; j <= pageSize; j++) {
if (j == this.current) {//如果页码等于当前页,则该页数没有超链接
sb.append("<li class=\"current\">");
sb.append(j);
sb.append("</li>");
} else {//否则给定超链接
sb.append("<li><a href=\"");
sb.append(this.path);
sb.append("?current=");
sb.append(j);
if (this.param != null && !"".equals(this.param)) {
sb.append("&");
sb.append(this.param);
}
sb.append("\">");
sb.append(j);
sb.append("</a></li>");
}
}
} else {
for (int j = this.current - 4; j <= pageSize; j++) {
if (j == this.current) {//如果页码等于当前页,则该页数没有超链接
sb.append("<li class=\"current\">");
sb.append(j);
sb.append("</li>");
} else {//否则给定超链接
sb.append("<li><a href=\"");
sb.append(this.path);
sb.append("?current=");
sb.append(j);
if (this.param != null && !"".equals(this.param)) {
sb.append("&");
sb.append(this.param);
}
sb.append("\">");
sb.append(j);
sb.append("</a></li>");
}
index++;
if (index > 10) {//如果循环到10次则退出循环
break;
}
}
}
} else {
for (int i = 1; i <= pageSize; i++) {
//如果页数小于等于10页,则全部显示
if (i == this.current) {//如果页码等于当前页,则该页数没有超链接
sb.append("<li class=\"current\">");
sb.append(i);
sb.append("</li>");
} else {//否则给出超链接
sb.append("<li><a href=\"");
sb.append(this.path);
sb.append("?current=");
sb.append(i);
if (this.param != null && !"".equals(this.param)) {
sb.append("&");
sb.append(this.param);
}
sb.append("\">");
sb.append(i);
sb.append("</a></li>");
}
index++;
if (index > 10) {
break;
}
}
}
}
//如果当前页是最后一页,则末页和下一页没有超链接
if (this.current.equals(pageSize) || this.count == 0) {
sb.append("<li class=\"disabled\">下一页</li><li class=\"disabled\">末页</li>");
} else {
sb.append("<li><a href=\"");
sb.append(this.path);
sb.append("?current=");
sb.append(this.current + 1);
if (this.param != null && !"".equals(this.param)) {
sb.append("&");
sb.append(this.param);
}
sb.append("\">下一页</a></li>");
sb.append("<li><a href=\"");
sb.append(this.path);
sb.append("?current=");
sb.append(pageSize);
if (this.param != null && !"".equals(this.param)) {
sb.append("&");
sb.append(this.param);
}
评论0
最新资源