public class PageTag extends BodyTagSupport {
/** 每页显示的记录数(标签的属性) */
private int pageSize = 20;
/** 目的地(标签的属性) */
private String gotoURI;
/** 总记录数名 */
public static final String TOTAL = "total";
/** 当前页号名 */
public static final String PAGNENO = "pageNo";
/** 每页要显示的记录数名 */
public static final String RECORDCOUNT = "pageSize";
/** 目的地名 */
public static final String GOTOURI = "gotoURI";
//标签处理程序
public int doStartTag() throws JspException {
/** 当前页号(从请求对象中得到) */
int pageNo = 1;
/** 总记录数(从请求对象中得到) */
int total = 0;
/** 总页数(计算得出) */
int totalPage = 1;
HttpServletRequest request = (HttpServletRequest) pageContext
.getRequest();
// 要输出到页面的HTML文本
StringBuffer sb = new StringBuffer();
sb.append("/r/n<form method='post' action='' ").append(
"name='pageController'>/r/n");
// 获取所有提交的参数(包括查询条件参数)
Enumeration enumeration = request.getParameterNames();
String name = null;
String value = null;
while (enumeration.hasMoreElements()) {
name = (String) enumeration.nextElement();
value = request.getParameter(name);
if (name.equals(RECORDCOUNT)) {
continue;
}
// 从请求对象中获取要跳转到的页号
if (name.equals(PAGNENO)) {
if (null != value && !"".equals(value)) {
pageNo = Integer.parseInt(value);
}
continue;
}
sb.append("<input type='hidden' name='").append(name).append(
"' value='").append(value).append("'/>/r/n");
}
//把当前页号设置成请求参数
sb.append("<input type='hidden' name='").append(PAGNENO).append(
"' value='").append(pageNo).append("'/>/r/n");
// 从请求对象中获取总记录数
String tot = (String) request.getAttribute(TOTAL);
if (null != tot && !"".equals(tot)) {
total = Integer.parseInt(tot);
}
//计算总页数
totalPage = getTotalPage(total);
//System.out.println("total-->" + total);
sb.append("<table width='98%'>/r/n");
sb.append(" <tr>/r/n");
sb.append(" <td colspan='2'>/r/n");
sb.append(" <div style='font-size: 0;line-height: 0;width: 100%;margin: 0;clear: both;border-top: #cccccc 1px dashed'></div>/r/n");
sb.append(" </td>/r/n");
sb.append(" </tr>/r/n");
sb.append(" <tr>/r/n");
sb.append(" <td align='left'>/r/n");
sb.append(" /r/n");
sb.append(" 总 ").append(totalPage).append(" 页,当前第 ").append(pageNo)
.append(" 页/r/n");
sb.append(" </td>/r/n");
sb.append(" <td align='right'>/r/n");
if (pageNo == 1) {
sb.append(" 首页");
sb.append(" ");
sb.append("上一页/r/n");
} else {
sb.append(" <a href='#' οnclick='turnOverPage(1)'>首页</a>/r/n");
sb.append(" ");
sb.append("<a href='#' οnclick='turnOverPage(")
.append((pageNo - 1)).append(")'>上一页</a>/r/n");
}
sb.append(" ");
if (pageNo == totalPage) {
sb.append("下一页");
sb.append(" ");
sb.append("尾页/r/n");
} else {
sb.append(" <a href='#' οnclick='turnOverPage(")
.append((pageNo + 1)).append(")'>下一页</a>/r/n");
sb.append(" ");
sb.append("<a href='#' οnclick='turnOverPage(")
.append(totalPage).append(")'>尾页</a>/r/n");
}
sb.append(" 跳到 /r/n");
sb.append(" <select onChange='turnOverPage(this.value)'>/r/n");
for(int i = 1; i <= totalPage; i++){
if(i == pageNo){
sb.append(" <option value='").append(i).append("' 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(" </td>/r/n");
sb.append(" </tr>/r/n");
sb.append("</table>/r/n");
sb.append("</form>/r/n");
// 生成提交表单的JS
sb.append("<script language='javascript'>/r/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("<=0){/r/n");
sb.append(" no=1;/r/n");
sb.append(" }/r/n");
sb.append(" form.").append(PAGNENO).append(".value=no;/r/n");
sb.append(" form.action='").append(gotoURI).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();
}
public String getGotoURI() {
return gotoURI;
}
public void setGotoURI(String gotoURI) {
this.gotoURI = gotoURI;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
/**
* 根据总记录数得到总页数
*
* @return int 总页数
*/
private int getTotalPage(int total) {
int totalPage = 1;
if (total == 0) {
totalPage = 1;
} else {
totalPage = (total % pageSize == 0) ? (total / pageSize)
: (total / pageSize + 1);
}
return totalPage;
}
}
在写相关的tld文件,就可以在页面用了。