第一步: 需要建立OssPageSplitTag类.
package com.dianziq.wenda.admin.tag;
import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyTagSupport;
import org.apache.commons.lang3.StringEscapeUtils;
import com.dianziq.wenda.admin.base.collection.PageSplit;
/**
* 后台分页的标签库
*
* @author Vernon.Chen
*/
public class OssPageSplitTag<T> extends BodyTagSupport {
/**
*
*/
private static final long serialVersionUID = 1L;
private String data = "pageSplit";// 数据集合名字
private String href; // 连接地址
private StringBuffer output; // 页面输出
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
public String getHref() {
return href;
}
public void setHref(String href) {
this.href = href;
}
@Override
public int doStartTag() throws JspException {
try {
output = new StringBuffer();
hander();
this.pageContext.getOut().write(output.toString());
} catch (IOException e) {
e.printStackTrace();
}
return SKIP_BODY;
}
@SuppressWarnings({ "unchecked" })
private void hander() {
// 转义href
href = StringEscapeUtils.escapeHtml4(href);
href = StringEscapeUtils.escapeEcmaScript(href);
// 如果URL不包含? 则添加?
if (href.indexOf("?") < 0) {
href += "?";
}
if (href.endsWith("?") || href.endsWith("&")) {
href += "pageIndex=";
} else {
href += "&pageIndex=";
}
PageSplit<T> pageSplit = (PageSplit<T>) this.pageContext.getRequest()
.getAttribute(data);
if (pageSplit != null) {
StringBuffer page = new StringBuffer();
page.append("<div class=\"pagination\">");
page.append("<ul>");
page.append("<li><a href=\"" + href + 1 + "\" title=\"首页\">« 首页</a></li>");
page.append("<li><a href=\"" + href + pageSplit.getPrevPage() + "\" title=\"上一页\">« 上一页</a></li>");
if (pageSplit.getTotalPage() <= 4) {// totalPage <=4 的时候
for (int i = 1; i <= pageSplit.getTotalPage(); i++) {
page.append("<li");
if (pageSplit.getPageIndex() == i) {
page.append(" class=\" active\" ");
} else {
page.append(" class=\"\" ");
}
page.append("><a href=\"" + href + i + "\" title=\"" + i + "\" >" + i + "</a></li>");
}
} else if (pageSplit.getTotalPage() > 4 && pageSplit.getTotalPage() <= 9) {// totalPage 在(4,9] 之间的时候
int endPageIndex = pageSplit.getPageIndex() + 3 > pageSplit
.getTotalPage() ? pageSplit.getTotalPage() : pageSplit
.getPageIndex() + 3;
for (int i = 1; i <= endPageIndex; i++) {
page.append("<li");
if (pageSplit.getPageIndex() == i) {
page.append(" class=\" active\" ");
} else {
page.append(" class=\"\" ");
}
page.append("><a href=\"" + href + i + "\" title=\"" + i + "\" >" + i + "</a></li>");
}
if (pageSplit.getPageIndex() + 3 < pageSplit.getTotalPage()) {
page.append("<li><a href=\"javascript:;\">...</a></li>");
}
} else {// totalPage 在(9,totalPage] 之间的时候
if (pageSplit.getPageIndex() + 3 <= 9) {
for (int i = 1; i <= pageSplit.getPageIndex() + 3; i++) {
page.append("<li");
if (pageSplit.getPageIndex() == i) {
page.append(" class=\" active\" ");
} else {
page.append(" class=\"\" ");
}
page.append("><a href=\"" + href + i + "\" title=\"" + i + "\" >" + i + "</a></li>");
}
page.append("<li><a href=\"javascript:;\">...</a></li>");
} else {
int endPageIndex = pageSplit.getPageIndex() + 3 > pageSplit
.getTotalPage() ? pageSplit.getTotalPage()
: pageSplit.getPageIndex() + 3;
page.append("<li><a href=\"" + href + 1 + "\" class=\"\" title=\"1\">1</a></li>");
page.append("<li><a href=\"" + href + 2 + "\" class=\"\" title=\"2\">2</a></li>");
page.append("<li><a href=\"javascript:;\">...</a></li>");
for (int i = pageSplit.getPageIndex() - 3; i <= endPageIndex; i++) {
page.append("<li");
if (pageSplit.getPageIndex() == i) {
page.append(" class=\" active\" ");
} else {
page.append(" class=\"\" ");
}
page.append("><a href=\"" + href + i + "\" title=\"" + i + "\" >" + i + "</a></li>");
}
if (pageSplit.getPageIndex() + 3 < pageSplit.getTotalPage()) {
page.append("<li><a href=\"javascript:;\">...</a></li>");
}
}
}
page.append("<li><a href=\"" + href + pageSplit.getNextPage() + "\" title=\"下一页\">» 下一页</a></li>");
page.append("<li><a href=\"" + href + pageSplit.getTotalPage() + "\" title=\"最后\">» 最后</a></li>");
page.append("</ul>");
page.append("</div>");
output.append(page);
}
}
/*
* (non-Javadoc)
*
* @see javax.servlet.jsp.tagext.BodyTagSupport#doEndTag()
*/
@Override
public int doEndTag() throws JspException {
return super.doEndTag();
}
}
第二步: 建立tld文件, 要放在WEB-IFO下面.
<?xml version="1.0" encoding="UTF-8"?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
<description>dzqOss taglibs 1.0</description>
<display-name>dzqOss tablibs</display-name>
<tlib-version>1.0</tlib-version>
<short-name>dzqOss</short-name>
<uri>/WEB-INF/tld/dzq_oss_taglibs.tld</uri>
<!-- 分页 -->
<tag>
<name>pagination</name>
<tag-class>com.dianziq.wenda.admin.tag.OssPageSplitTag</tag-class>
<body-content>JSP</body-content>
<attribute>
<name>href</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>data</name>
<required>true</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
</tag>
</taglib>
第三步: JSP页面引入css, js
<!-- ************************* 网站模板CSS *********************** -->
<link rel="stylesheet" href="<%=basePath%>bootstrap/css/bootstrap.min.css" type="text/css" media="screen" />
<!-- ************************* 网站模板JS *********************** -->
<script type="text/javascript" src="<%=basePath%>js/jquery-1.8.1.js"></script>
<script type="text/javascript" src="<%=basePath%>bootstrap/js/bootstrap.min.js"></script>
第四步: 引入自定义标签
<%@ taglib prefix="dzqOss" uri="/WEB-INF/tld/dzq_oss_taglibs.tld"%>
第五步: 调用.
<dzqOss:pagination href="bgMng/user/userFlag!query.action?queryType=${queryType}&keyword=${keyword}" data="ossUserFlagSplit"></dzqOss:pagination>
注意: 其中href中,我们直接用${}表达式直接输入,会导致JS注入的,所以在Java代码中我利用了.
// 转义href
href = StringEscapeUtils.escapeHtml4(href);
href = StringEscapeUtils.escapeEcmaScript(href);
在Strus中, <s:property value="userName" escapeHtml="true"/> 源码里也是用的这个转义的common-lang包. 比较好用.
看看运行效果图: