taglib并不仅仅适用于springmvc
1.web.xml中定义标签文件路径和自定义uri
<jsp-config>
<taglib>
<taglib-uri>http://www.tag.com/mytag</taglib-uri>
<taglib-location>/WEB-INF/tags.tld </taglib-location>
</taglib>
</jsp-config>
2.定义标签
<?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>1.0</tlib-version>
<jsp-version>1.2</jsp-version>
<short-name>mytag</short-name>
<tag>
<name>pagination</name>
<tag-class>com.mvc.rest.common.utils.PaginateTag</tag-class>
<attribute>
<name>items</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
<description>
<![CDATA[Reference the collection that will be retrieved.]]>
</description>
</attribute>
</tag><pre name="code" class="html"></taglib>
package com.mvc.rest.common.utils;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspTagException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class PaginateTag extends TagSupport
{
private static final long serialVersionUID = 150848338515348102L;
private final Log log = LogFactory.getLog(PaginateTag.class);
private String items;
public int doEndTag()
throws JspException
{
HttpServletRequest request = (HttpServletRequest)this.pageContext
.getRequest();
PaginatedList pList = (PaginatedList)request
.getAttribute(getItems());
String action = "";
if (pList.size() >= 1) {
writePage(pList.getPages(), pList.getCurrentPage(), pList
.getPageSize(), pList.getTotleCount(), action);
printJS();
}
return 6;
}
private void writePage(int pages, int currentPage, int pageSize, int records, String action)
throws JspException
{
try
{
JspWriter writer = this.pageContext.getOut();
StringBuffer content = new StringBuffer();
content.append("<table width='100%' class='tfoot'>");
content.append("<input type='hidden' name='ec_p' value='" + currentPage + "' />");
content.append("<input type='hidden' name='act' value='" + action + "' />");
content.append("<input type='hidden' name='ec_crd' value='" +
pageSize + "' />");
content.append("<td colspan='9'>");
if (currentPage <= 1) {
content.append("首页 上一页 ");
} else {
content.append("<a href=\"javascript:gotoPage('" + action + "','1','" +
pageSize + "');\">首页</a> ");
content.append("<a href=\"javascript:gotoPage('" + action + "','" + (
currentPage - 1) + "','" + pageSize +
"');\">上一页</a> ");
}
if (currentPage >= pages) {
content.append("下一页 尾页 ");
} else {
content.append("<a href=\"javascript:gotoPage('" + action + "','" + (
currentPage + 1) + "','" + pageSize +
"');\">下一页</a> ");
content.append("<a href=\"javascript:gotoPage('" + action + "','" + pages +
"','" + pageSize + "');\">尾页</a>");
}
content
.append(" 页次::<span class='red'>" + (
pages == 0 ? 0 : currentPage));
content.append("</span>/<span class='red'>" + pages + "</span>页 ");
content
.append("<SELECT name='selSize' οnchange=\"javascript:gotoPage('" + action + "','1',this.value);\">");
if (!action.equals("mongo-historySercByXt.whbs?1=1")) {
content.append("<OPTION value='5'>5</OPTION>");
content.append("<OPTION value='10' selected>10</OPTION>");
content.append("<OPTION value='20'>20</OPTION>");
content.append("<OPTION value='50'>50</OPTION>");
content.append("<OPTION value='100'>100</OPTION>");
} else {
content.append("<OPTION value='1'>1</OPTION>");
}
content.append("</SELECT> 条/页 ");
content.append("共<span class='red'>" + records + "</span>条记录 ");
content
.append("转到第<SELECT name='selPage' style='width:60px;'οnchange=\"javascript:gotoPage('" + action + "',this.value,'" +
pageSize + "');\">");
for (int i = 1; i <= pages; i++) {
content.append("<OPTION value=" + i + " " + (
i == currentPage ? " selected" : "") + ">" + i +
"</OPTION>");
}
content.append("</select> 页 ");
content.append("</td>");
content.append("</table>");
writer.print(content.toString());
} catch (Exception e) {
this.log.trace(e);
throw new JspTagException("PaginateTag: " + e.getMessage());
}
}
private void printJS()
throws JspException
{
try
{
JspWriter writer = this.pageContext.getOut();
StringBuffer content = new StringBuffer();
content.append("<SCRIPT language='JavaScript'>");
content.append("makeSizes();");
content.append("function gotoPage(path, page, pageSize) {");
content.append("document.all.act.value=path;");
content.append("document.all.ec_p.value=page;");
content.append("document.all.ec_crd.value=pageSize;");
content.append("document.pagination.submit();}");
content.append("function makeSizes() {");
content.append("var pageSize = document.all['ec_crd'].value;");
content.append("var sel=document.all['selSize'];");
content.append("for(var i=0; i<=5; i++) {");
content.append("if(sel.options[i] && sel.options[i].value==pageSize){");
content.append("sel.options[i].selected=true;");
content.append("break;}}}");
content.append("</SCRIPT>");
writer.print(content.toString());
} catch (Exception e) {
this.log.trace(e);
throw new JspTagException("PaginateTag: " + e.getMessage());
}
}
public String getItems() {
return this.items;
}
public void setItems(String items) {
this.items = items;
}
}
4.引用和使用
<%@ taglib uri="http://www.tag.com/mytag" prefix="tagEx" %>
传入相应参数即可
<tagEx:pagination items=""></tagEx:pagination>