1、在WEB-INF目录下面添加adtec.tld文件
<?xml version="1.0" encoding="UTF-8"?> <taglib version="2.0" 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 web-jsptaglibrary_2_0.xsd"> <!--版本号--> <tlib-version>1.0</tlib-version> <jsp-version>2.0</jsp-version> <short-name>adtec</short-name> <uri>http://www.adtec.com.cn</uri> <tag> <!-- 指定标签名 --> <name>localFileName</name> <!-- 指定标签类文件的全路径 --> <tag-class>adtec.tag.LocalFileName</tag-class> <!--如果不需要标签体则设置empty,反之设定jsp --> <body-content>jsp</body-content> <!-- 设定属性(如果有的话) --> <attribute> <!-- 指定标签名 --> <name>isShow</name> <!-- 是否是必须,如果非必须没设置则为空 --> <required>false</required> </attribute> </tag> <tag> <!-- 指定标签名 --> <name>page</name> <!-- 指定标签类文件的全路径 --> <tag-class>adtec.tag.PageTag</tag-class> <!--如果不需要标签体则设置empty,反之设定jsp --> <body-content>jsp</body-content> <!-- 设定属性(如果有的话) --> <attribute> <!-- 指定标签名 --> <name>url</name> <!-- 是否是必须,如果非必须没设置则为空 --> <required>true</required> </attribute> <attribute> <!-- 指定标签名 --> <name>curpage</name> <!-- 是否是必须,如果非必须没设置则为空 --> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <!-- 指定标签名 --> <name>pagesize</name> <!-- 是否是必须,如果非必须没设置则为空 --> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <!-- 指定标签名 --> <name>totalLines</name> <!-- 是否是必须,如果非必须没设置则为空 --> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> </taglib>
2、在web.xml文件中添加如下代码
<!-- 使用自定义标签 --> <jsp-config> <taglib> <taglib-uri>http://www.adtec.com.cn</taglib-uri> <!-- tld文件所在的位置--> <taglib-location>/WEB-INF/adtec.tld</taglib-location> </taglib> </jsp-config>
3、添加java文件
package adtec.tag; import java.io.IOException; import javax.servlet.http.HttpServletRequest; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.tagext.Tag; import javax.servlet.jsp.tagext.TagSupport; /** * 显示当前JSP页面 * @author huangbiao */ public class LocalFileName extends TagSupport { /** * 是否显示内容 * true 显示 * false 不显示 */ private String isShow; public String getIsShow() { return isShow; } public void setIsShow(String isShow) { this.isShow = isShow; } @Override public int doStartTag() throws JspException { if("false".equals(isShow)){ return Tag.SKIP_BODY; } JspWriter jspWriter = this.pageContext.getOut(); HttpServletRequest request = (HttpServletRequest)this.pageContext.getRequest(); String uri= request.getRequestURI(); uri=uri.substring(uri.lastIndexOf("/")+1); //<meta name="currentPageName" contect=""> try { jspWriter.println("<meta name=\"currentPageName\" contect=\""+uri+"\">"); } catch (IOException e) { e.printStackTrace(); } return Tag.EVAL_BODY_INCLUDE; } }
4、在JSP页面中添加使用的标签
<%@taglib uri="http://www.adtec.com.cn" prefix="adtec"%> <adtec:localFileName isShow="false"></adtec:localFileName>
使用上面这种标签是为了查看当前jsp页面的名称,方便开发调试。
5、添加JAVA测试页面
package adtec.tag; import java.io.IOException; import java.text.MessageFormat; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.tagext.TagSupport; /** * 分页标签 * @author huangbiao */ public class PageTag extends TagSupport { private String url; // 链接地址 private int curpage;// 当前页 private int pagesize; // 页大小 private int totalLines; // 总记录条数 public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public int getCurpage() { return curpage; } public void setCurpage(int curpage) { this.curpage = curpage; } public int getPagesize() { return pagesize; } public void setPagesize(int pagesize) { this.pagesize = pagesize; } public int getTotalLines() { return totalLines; } public void setTotalLines(int totalLines) { this.totalLines = totalLines; } /** * 计算总页数 * @return */ private int totalPages() { int result = totalLines % pagesize == 0 ? totalLines / pagesize : totalLines / pagesize + 1; //如果传递的totalLines为0则让其为1 return result == 0 ? 1 : result; } @Override public int doStartTag() throws JspException { JspWriter out = this.pageContext.getOut(); // {0}:url, {1}:curpage, {2}:pagesize, {3}:第一页 上一页 下一页 最后一页 // String link = "<a href='{0}?curpage={1}&pagesize={2}'>{3}</a>"; // String link = "<A href=\"#\" onclick=\"return onSelect('${pageModel.pageUp }')\"><font id=\"pageUp\">上一页</font></A>"; String link = "<A href=\"{0}?pageNow={1}\">{2}</A>"; if (curpage == 0){ curpage = 1; } if (pagesize == 0){ pagesize = 5; } int totalPages = this.totalPages(); if (curpage > totalPages){ curpage = totalPages; } if (curpage < 1){ curpage = 1; } String first = MessageFormat.format(link, url, "1", "第一页"); String previous = null; if (curpage <= 1) { previous = "上一页"; } else { previous = MessageFormat.format(link, url, String.valueOf(curpage - 1), "上一页"); } String next = null; if (curpage >= totalPages) { next = "下一页"; } else { next = MessageFormat.format(link, url, String.valueOf(curpage + 1), "下一页"); } String last = MessageFormat.format(link, url, String.valueOf(totalPages), "最后一页"); //${pageModel.pageNow } ${pageModel.pageCount } ${pageModel.pageUp} ${pageModel.pageDown} try { //String html = "{0} {1} {2} {3} 当前第{4}页 共{5}页 每页显示{6}条 共有{7}条"; //html = MessageFormat.format(html, first, previous, next, last, String.valueOf(curpage), String.valueOf(totalPages), String.valueOf(pagesize), String.valueOf(totalLines)); //{0}第一页 {1}上一页 {2}currentPage/{3}totalPage {4}下一页 {5}最后一页 String outStr = "<div class=\"list_btline\"><div class=\"f_size selbar_bt barspace2\" style=\"height: 24px; padding-top: 3px\">" + "<DIV class=\"right\" style=\"padding-right:20px;\">" + "{0} " + "{1} " + "{2}/{3}页 " + "{4} " + "{5} " + "<input type=\"text\" style=\"width: 20px;\" name=\"pageJump\" id=\"pageJump\"><A title=\"跳转到指定一页\" href=\"#\" " + "onclick=\"return onJumpSelect()\">跳转</A></DIV></div></div>"; outStr = MessageFormat.format(outStr, first,previous, String.valueOf(curpage),String.valueOf(totalPages), next, last); out.println(outStr); } catch (IOException e) { e.printStackTrace(); } return EVAL_BODY_INCLUDE; } }
备注:可以先预定义一个字符串的模板,然后将变量部分作为参数传递
6、在JSP页面中添加使用的标签
<%@taglib uri="http://www.adtec.com.cn" prefix="adtec"%> <adtec:page url="accountList.do" totalLines="${pageModel.count }" curpage="${pageModel.pageNow }" pagesize="${pageModel.pageSize }"></adtec:page>
备注:需要强调的是上面这种分页实际上是需要跟美工配合的,包括其中的CSS样式,上面这种方式只是能解决分页逻辑判断。