在web开发中,分页是大多数页面常见的功能,使用标签来实现,可以减少重复劳动,保持样式统一。好处多多。
首先看下效果图:
这里我们使用了Bootstrap框架中的样式,在后台代码中,你可以将其更换成其他样式。
分页标签的后台代码如下:
package com.lemon.util; import java.io.IOException; import java.text.MessageFormat; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.tagext.TagSupport; /** * 分页标签 * */ public class PageTag extends TagSupport { /** * */ private static final long serialVersionUID = -6270647848746404911L; private String url; //链接地址 private int curPage;// 当前页 private int pageSize; // 页大小 private int totalCount; // 总记录条数 public void setUrl(String url) { this.url = url; } public String getUrl() { return 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 getTotalCount() { return totalCount; } public void setTotalCount(int totalCount) { this.totalCount = totalCount; } /** * 计算总页数 * @return */ private int totalPages(){ return totalCount % pageSize == 0 ? totalCount / pageSize : totalCount / pageSize + 1; } @Override public int doStartTag() throws JspException { JspWriter out = this.pageContext.getOut(); try { int totalPageNum=this.totalPages(); StringBuffer liStr=new StringBuffer(); for(int i=1;i<=totalPageNum;i++){ String hrefStr=url+"?params.curPage="+i+"¶ms.pageSize="+pageSize; if(curPage==i){ liStr.append("<li class='active'><a href=").append(hrefStr).append(">").append(i).append("</a>"); }else{ liStr.append("<li><a href=").append(hrefStr).append(">").append(i).append("</a>"); } } String firstPageStr=url+"?params.curPage=1¶ms.pageSize="+pageSize; String lastPageStr=url+"?params.curPage="+totalPageNum+"¶ms.pageSize="+pageSize; String link = "<ul class='pagination pagination'> <li><a href="+firstPageStr+">«</a></li>"; link+=liStr.toString(); link+="<li><a href="+lastPageStr+">»</a></li></ul>"; String html = "{0} 共{1}页 每页显示{2}条 共有{3}条"; html = MessageFormat.format(html, link, String.valueOf(totalPageNum), String.valueOf(pageSize), String.valueOf(totalCount)); out.println(html); } catch (IOException e) { e.printStackTrace(); } return EVAL_BODY_INCLUDE; } }
需要注意的是,TagSupport是基于JSP2.1的。
在WEB-INF下,需要定义一个标签库文件,参考如下内容:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_2.dtd"> <taglib> <tlib-version>1.0</tlib-version> <jsp-version>1.2</jsp-version> <short-name>page</short-name> <tag> <name>page</name> <tag-class>com.lemon.util.PageTag</tag-class> <body-content>empty</body-content> <attribute> <name>url</name> <required>true</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <name>curPage</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>pageSize</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>totalCount</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> </taglib>
不要忘记,在web.xml中需要定义我们的标签库:
<jsp-config> <taglib> <taglib-uri>/WEB-INF/page</taglib-uri> <taglib-location>page.tld</taglib-location> </taglib> </jsp-config>
到此,基本完成了分页标签的开发工作,最后看下页面中如何调用吧。首先是引入:
然后是调用:<%@taglib prefix="page" uri="/WEB-INF/page"%>
<div class="row-fluid"> <page:page url="http://ip:port/webapp/xxx.action" pageSize="${params.pageSize}" totalCount="${params.totalCount}" curPage="${params.curPage}" /> </div>
我们可能还需要Model来维护标签中的一些参数,这里就不再赘述。
jsp分页标签
最新推荐文章于 2018-09-13 19:22:12 发布