/*
* @(#)PageTag.java 1.00 2012-3-8
*
* Copyright 2011 YONG-ZHI Tech. Co., Ltd. All rights reserved.
* YONG-ZHI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
* http://hi.csdn.net/linchengzhi
*/
package lcz.test.util;
import java.io.IOException;
import java.util.Enumeration;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;
//标签实现类
public class PageTag extends TagSupport {
private static final long serialVersionUID = 1L;
private int currentPage;// 当前是第几页
private int totalRows; // 总共有几个记录
private int pageSize ; // 每页有几个记录
private String url; // 请求的url地址
public int getCurrentPage() {
return currentPage;
}
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
public int getTotalRows() {
return totalRows;
}
public void setTotalRows(int totalRows) {
this.totalRows = totalRows;
}
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;
}
@Override
public int doStartTag() throws JspException {
if (totalRows == 0) {
return super.doStartTag();
}
// 计算总共有几页
int totalPage = (totalRows + pageSize - 1) / pageSize;
if (currentPage > totalPage) {
currentPage = totalPage;
}
if (currentPage < 1) {
currentPage = 1;
}
// 转化成字符串形式
StringBuilder sb = new StringBuilder();
// 前台的分页显示,把分页的格式添加到显示的页面上去
// 把当前页隐藏,以便jsp提交的时候,其它地方(本页,他页,后台)可以取到该值
sb.append(
"<form name='pageController' id='pageController' action='' method='post'>\r\n")
.append("<input type='hidden' id='currentPage' name='currentPage' value='"
+ currentPage + "' />\r\n");
// 获取当前页
HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
@SuppressWarnings("unchecked")
Enumeration<String> enumeration = request.getParameterNames();
String name = null;
String value = null;
while (enumeration.hasMoreElements()) {
name = enumeration.nextElement();
value = request.getParameter(name);
if (name.equals("currentPage")) {
if (null != value && !"".equals(value)) {
currentPage = Integer.parseInt(value);
}
continue;
}
sb.append("<input type='hidden' name='").append(name)
.append("' value='").append(value).append("'/>\r\n");
}
sb.append("第" + currentPage + "页 \r\n").append(" 共" + totalPage + "页,");
// 逻辑判断显示分页格式
if (currentPage == 1) {
sb.append("首页");
sb.append(" ");
sb.append("上一页\r\n");
} else {
sb.append("<a href='#' onclick='turnOverPage(1)'>首页</a>\r\n");
sb.append(" ");
sb.append("<a href='#' onclick='turnOverPage(")
.append((currentPage - 1)).append(")'>上一页</a>\r\n");
}
sb.append(" ");
if (currentPage == totalPage) {
sb.append("下一页");
sb.append(" ");
sb.append("尾页\r\n");
} else {
sb.append("<a href='#' onclick='turnOverPage(")
.append((currentPage + 1)).append(")'>下一页</a>\r\n");
sb.append(" ");
sb.append("<a href='#' onclick='turnOverPage(").append(totalPage)
.append(")'>尾页</a>\r\n");
}
sb.append(" 转到<select onChange='turnOverPage(this.value)'>\r\n");
for (int i = 1; i <= totalPage; i++) {
if (i == currentPage) {
sb.append(" <option value='").append(i)
.append("' selected='selected'>第").append(i)
.append("页</option>\r\n");
} else {
sb.append(" <option value='").append(i).append("'>第")
.append(i).append("页</option>\r\n");
}
}
sb.append("</select>\r\n");
sb.append(" \r\n");
sb.append("</form>\r\n");
// 生成提交表单的JS
sb.append("<script language='javascript'>\r\n");
//翻页函数
sb.append(" \t\n");
sb.append(" function turnOverPage(no){\r\n");
sb.append(" var form = document.pageController;\r\n");
//页号越界处理
sb.append(" \r\n");
sb.append(" if(no").append(">").append(totalPage).append(") {\r\n");
sb.append(" no=").append(totalPage).append(";\r\n");
sb.append(" }\r\n");
sb.append(" if(no").append("< 1){\r\n");
sb.append(" no=1;\r\n");
sb.append(" }\r\n");
sb.append(" form.").append("currentPage").append(".value=no;\r\n");
sb.append(" form.action='").append(url).append("';\r\n");
sb.append(" form.submit();\r\n");
sb.append(" }\r\n");
sb.append("</script>\r\n");
try {
pageContext.getOut().println(sb.toString());
} catch (IOException e) {
e.printStackTrace();
}
return super.doStartTag();
}
}
- 1
- 2
前往页