这篇文章主要为大家展示了“J2EE如何实现分页”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“J2EE如何实现分页”这篇文章吧。
先说明一下J2EE实现分页所需要用到的文件Pager.java (不用说,肯定是保存分页信息的了),PagerHelper.java(处理页面信息) ,PageTag.java(自定义分页标签),还有一个是pagetag.tld文件,分页标签描述文件.
先帖出这四个文件的源码
1、Pager.java
package org.awc.commns; /** * 保存分页信息的类 * * @author Administrator * */ public class Pager { private int totalRows; // 总行数 private int pageSize; // 每页显示的行数 private int currentPage; // 当前页号 private int totalPages; // 总页数 private int startRow; // 当前页在数据库中的起始行 private String linkUrl; // 要跳转的URL public Pager() { } public Pager(int _totalRows,int _pageSize) { totalRows = _totalRows; pageSize = _pageSize; totalPages = totalRows / pageSize; int mod = totalRows % pageSize; if (mod > 0) { totalPages++; } currentPage = 1; startRow = 0; } //此处略去属性的getter和setter方法 /** * 设定hibernate查询的起始行数 * * @param currentPage */ public void setStart(int currentPage) { this.currentPage = currentPage; startRow = (currentPage - 1) * pageSize; } }
2、PagerHelper.java
import javax.servlet.http.*; /** * 控制分页的类 * * @author Administrator * */ public class PagerHelper { public static Pager getPager(HttpServletRequest httpServletRequest, int totalRows,int pageSize) { // 定义pager对象,用于传到页面 Pager pager = new Pager(totalRows,pageSize); // 从Request对象中获取当前页号 String currentPage = httpServletRequest.getParameter("cpage"); // 如果当前页号为空,表示为***查询该页 // 如果不为空,则刷新pager对象,输入当前页号等信息 if (currentPage != null) { pager.setStart(Integer.parseInt(currentPage)); } else { pager.setStart(1); } return pager; } }
3、PageTag.java
import java.io.IOException; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.tagext.TagSupport; public class PageTag extends TagSupport { /** * */ private static final long serialVersionUID = 1L; private Pager pager; public int doStartTag() { try { JspWriter out = pageContext.getOut(); out.print("第 " + pager.getCurrentPage() + " 页/共 " + (pager.getTotalPages()) + " 页"); if (pager.getCurrentPage() == 1) { out.print("[最首页]"); out.print("[上一页]"); } if (pager.getCurrentPage() != 1) { out.print("[< a href='" + pager.getLinkUrl() + "&cpage=1'>最首页< /a>]"); out.print("[< a href='" + pager.getLinkUrl() + "&cpage=" + (pager.getCurrentPage() - 1) + "'>上一页< /a>]"); } for (int i = pager.getCurrentPage() - 3; i < = pager .getCurrentPage() + 3; i++) { if (i < = 0 || i > pager.getTotalPages()) { continue; } if (i == pager.getCurrentPage()) { out .print("[< span style='color:#FF0000; border: 1px solid #cccccc; font-weight:bold; width:15px;text-align: center;'> " + i + " < /span>]"); } else { out.print("[< a href='" + pager.getLinkUrl() + "&cpage=" + i + "'> " + i + " < /a>]"); } } if (pager.getCurrentPage() == pager.getTotalPages() || pager.getTotalPages() == 0) { out.print("[下一页]"); out.print("[最末页]"); } if (pager.getCurrentPage() != pager.getTotalPages() && pager.getTotalPages() != 0) { out.print("[< a href='" + pager.getLinkUrl() + "&cpage=" + (pager.getCurrentPage() + 1) + "'>下一页< /a>]"); out.print("[< a href='" + pager.getLinkUrl() + "&cpage=" + (pager.getTotalPages()) + "'>最末页< /a>]"); } out.flush(); } catch (IOException ex) { ex.printStackTrace(); } return super.SKIP_BODY; } public int doEndTag() { return super.EVAL_PAGE; } public void setPager(Pager pager) { this.pager = pager; } public Pager getPager() { return pager; } }
4、pagetag.tld
< !DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd"> < taglib xmlns="http://java.sun.com/JSP/TagLibraryDescriptor"> < tlib-version>1.0< /tlib-version> < jsp-version>1.2< /jsp-version> < short-name>My Tags< /short-name> < tag> < name>page< /name> < tag-class>org.awc.commns.PageTag< /tag-class>< !-- PageTag.java具体项目路径--> < body-content>empty< /body-content> < attribute> < name>pager< /name> < required>true< /required> < rtexprvalue>true< /rtexprvalue> < type>org.awc.commns.Pager< /type>< !-- Pager.java具体项目路径--> < /attribute> < /tag> < /taglib>
以上四个文件为固定,其余部分代码示例如下:
Action或者Servlet部分:
public ActionForward display(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { //不相关代码略去 int totalRows;// 记录总行数 Pager pager = null; // 页面信息 int pageSize = 15; try { totalRows = tservice.getTotalRowsBySubType(tsid); // 获取指定主题总行数 pager = PagerHelper.getPager(request, totalRows, pageSize); // 初始化分页对象 pager.setLinkUrl("index.asp?method=display&stid=" + tsid); // 设置跳转路径 request.setAttribute("pb", pager); // 将分页信息保存在Request对象 topicList = tservice.findTopicByStid(tsid, pager); // 根据分页信息查询指定的主题 request.setAttribute("results", topicList); return mapping.findForward("index"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return mapping.findForward("fail"); }
JSP 页面部分:
1、在页面开始部分导入标签库文件 :< %@ taglib prefix="page" uri="WEB-INF/pageTld/pagetag.tld"%> –具体路径视具体项目而定
2、在需要加入分页信息的部分加上< page:page pager="${pb}" /> 即可。
以上是“J2EE如何实现分页”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/tech/dev/209267.html