JSP分页标签的实现:一个util类,一个pojo类,一个tld标签文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE taglib
PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib >
<tlib-version > 2.0</tlib-version >
<jsp-version > 1.2</jsp-version >
<short-name > common</short-name >
<uri > http://keking.wang/common/</uri >
<display-name > Common Tag</display-name >
<description > Common Tag library</description >
<tag >
<name > page</name >
<tag-class > wang.keking.common.utils.NavigationTag</tag-class >
<body-content > JSP</body-content >
<description > create navigation for paging</description >
<attribute >
<name > bean</name >
<rtexprvalue > true</rtexprvalue >
</attribute >
<attribute >
<name > number</name >
<rtexprvalue > true</rtexprvalue >
</attribute >
<attribute >
<name > url</name >
<required > true</required >
<rtexprvalue > true</rtexprvalue >
</attribute >
</tag >
</taglib >
import java.util.List;
public class Page<T> {
private int total;
private int page;
private int size;
private List<T> rows;
public int getTotal () {
return total;
}
public void setTotal (int total) {
this .total = total;
}
public int getPage () {
return page;
}
public void setPage (int page) {
this .page = page;
}
public int getSize () {
return size;
}
public void setSize (int size) {
this .size = size;
}
public List<T> getRows () {
return rows;
}
public void setRows (List<T> rows) {
this .rows = rows;
}
}
import java.io.IOException;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;
/**
* 显示格式 上一页 1 2 3 4 5 下一页
*/
public class NavigationTag extends TagSupport {
static final long serialVersionUID = 2372405317744358833 L;
/**
* request 中用于保存Page<E> 对象的变量名,默认为“page”
*/
private String bean = "page" ;
/**
* 分页跳转的url地址,此属性必须
*/
private String url = null ;
/**
* 显示页码数量
*/
private int number = 5 ;
@Override
public int doStartTag () throws JspException {
JspWriter writer = pageContext.getOut();
HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
Page page = (Page) request.getAttribute(bean);
if (page == null )
return SKIP_BODY;
url = resolveUrl(url, pageContext);
try {
int pageCount = page.getTotal() / page.getSize();
if (page.getTotal() % page.getSize() > 0 ) {
pageCount++;
}
writer.print("<nav><ul class=\"pagination\">" );
if (page.getPage() > 1 ) {
String preUrl = append(url, "page" , page.getPage() - 1 );
preUrl = append(preUrl, "rows" , page.getSize());
writer.print("<li><a href=\"" + preUrl + "\">上一页</a></li>" );
} else {
writer.print("<li class=\"disabled\"><a href=\"#\">上一页</a></li>" );
}
int indexPage = (page.getPage() - 2 > 0 ) ? page.getPage() - 2 : 1 ;
for (int i = 1 ; i <= number && indexPage <= pageCount; indexPage++, i++) {
if (indexPage == page.getPage()) {
writer.print("<li class=\"active\"><a href=\"#\">" + indexPage
+ "<span class=\"sr-only\">(current)</span></a></li>" );
continue ;
}
String pageUrl = append(url, "page" , indexPage);
pageUrl = append(pageUrl, "rows" , page.getSize());
writer.print("<li><a href=\"" + pageUrl + "\">" + indexPage + "</a></li>" );
}
if (page.getPage() < pageCount) {
String nextUrl = append(url, "page" , page.getPage() + 1 );
nextUrl = append(nextUrl, "rows" , page.getSize());
writer.print("<li><a href=\"" + nextUrl + "\">下一页</a></li>" );
} else {
writer.print("<li class=\"disabled\"><a href=\"#\">下一页</a></li>" );
}
writer.print("</nav>" );
} catch (IOException e) {
e.printStackTrace();
}
return SKIP_BODY;
}
private String append (String url, String key, int value) {
return append(url, key, String.valueOf(value));
}
/**
* 为url 参加参数对儿
*/
private String append (String url, String key, String value) {
if (url == null || url.trim().length() == 0 ) {
return "" ;
}
if (url.indexOf("?" ) == -1 ) {
url = url + "?" + key + "=" + value;
} else {
if (url.endsWith("?" )) {
url = url + key + "=" + value;
} else {
url = url + "&" + key + "=" + value;
}
}
return url;
}
/**
* 为url 添加翻页请求参数
*/
private String resolveUrl (String url, javax.servlet.jsp.PageContext pageContext) throws JspException {
Map params = pageContext.getRequest().getParameterMap();
for (Object key : params.keySet()) {
if ("page" .equals(key) || "rows" .equals(key))
continue ;
Object value = params.get(key);
if (value == null )
continue ;
if (value.getClass().isArray()) {
url = append(url, key.toString(), ((String[]) value)[0 ]);
} else if (value instanceof String) {
url = append(url, key.toString(), value.toString());
}
}
return url;
}
public String getBean () {
return bean;
}
public void setBean (String bean) {
this .bean = bean;
}
public String getUrl () {
return url;
}
public void setUrl (String url) {
this .url = url;
}
public void setNumber (int number) {
this .number = number;
}
}
<%@ taglib prefix="keking" uri="http://keking.wang/common/" %>
<keking:page url ="${pageContext.request.contextPath }/demo/list.action" />