先是一个page的bean:
然后构建一个page的工厂PageUtil:
然后建一个专用的bean:
然后在数据访问层写两个方法:
ProductDAO:
ProductDAO的接口实现ProductDAOImpl:
然后是业务层IProduct:
然后IProduct接口的实现:IProductImpl:
Action
JSP
然后productAction里面的showProductByTag代码如下:
package com.leatherstore.other; public class Page { /** 是否有上一页 */ private boolean hasPrePage; /** 是否有下一页 */ private boolean hasNextPage; /** 每页的数量 */ private int everyPage; /** 总页数 */ private int totalPage; /** 当前页*/ private int currentPage; /** 起始点 */ private int beginIndex; /** 总记录数*/ private int totalCount; /** * @return totalCount */ public int getTotalCount() { return totalCount; } /** * @param totalCount 要设置的 totalCount */ public void setTotalCount(int totalCount) { this.totalCount = totalCount; } /** The default constructor */ public Page(){ } /** construct the page by everyPage * @param everyPage * */ public Page(int everyPage){ this.everyPage = everyPage; } /** The whole constructor */ public Page(boolean hasPrePage, boolean hasNextPage, int everyPage, int totalPage, int currentPage, int beginIndex,int totalCount) { this.hasPrePage = hasPrePage; this.hasNextPage = hasNextPage; this.everyPage = everyPage; this.totalPage = totalPage; this.currentPage = currentPage; this.beginIndex = beginIndex; this.totalCount = totalCount; } /** * @return * Returns the beginIndex. */ public int getBeginIndex() { return beginIndex; } /** * @param beginIndex * The beginIndex to set. */ public void setBeginIndex(int beginIndex) { this.beginIndex = beginIndex; } /** * @return * Returns the currentPage. */ public int getCurrentPage() { return currentPage; } /** * @param currentPage * The currentPage to set. */ public void setCurrentPage(int currentPage) { this.currentPage = currentPage; } /** * @return * Returns the everyPage. */ public int getEveryPage() { return everyPage; } /** * @param everyPage * The everyPage to set. */ public void setEveryPage(int everyPage) { this.everyPage = everyPage; } /** * @return * Returns the hasNextPage. */ public boolean getHasNextPage() { return hasNextPage; } /** * @param hasNextPage * The hasNextPage to set. */ public void setHasNextPage(boolean hasNextPage) { this.hasNextPage = hasNextPage; } /** * @return * Returns the hasPrePage. */ public boolean getHasPrePage() { return hasPrePage; } /** * @param hasPrePage * The hasPrePage to set. */ public void setHasPrePage(boolean hasPrePage) { this.hasPrePage = hasPrePage; } /** * @return Returns the totalPage. * */ public int getTotalPage() { return totalPage; } /** * @param totalPage * The totalPage to set. */ public void setTotalPage(int totalPage) { this.totalPage = totalPage; } }
然后构建一个page的工厂PageUtil:
public class PageUtil { /** * Use the origin page to create a new page * * @param page * @param totalRecords * @return */ public static Page createPage(Page page, int totalRecords) { return createPage(page.getEveryPage(), page.getCurrentPage(), totalRecords); } /** * the basic page utils not including exception handler * * @param everyPage * @param currentPage * @param totalRecords * @return page */ public static Page createPage(int everyPage, int currentPage, int totalRecords) { everyPage = getEveryPage(everyPage); currentPage = getCurrentPage(currentPage); int beginIndex = getBeginIndex(everyPage, currentPage); int totalPage = getTotalPage(everyPage, totalRecords); boolean hasNextPage = hasNextPage(currentPage, totalPage); boolean hasPrePage = hasPrePage(currentPage); return new Page(hasPrePage, hasNextPage, everyPage, totalPage, currentPage, beginIndex, totalRecords); } private static int getEveryPage(int everyPage) { return everyPage == 0 ? 10 : everyPage; } private static int getCurrentPage(int currentPage) { return currentPage == 0 ? 1 : currentPage; } private static int getBeginIndex(int everyPage, int currentPage) { return (currentPage - 1) * everyPage; } private static int getTotalPage(int everyPage, int totalRecords) { int totalPage = 0; if (totalRecords % everyPage == 0) totalPage = totalRecords / everyPage; else totalPage = totalRecords / everyPage + 1; return totalPage; } private static boolean hasPrePage(int currentPage) { return currentPage == 1 ? false : true; } private static boolean hasNextPage(int currentPage, int totalPage) { return currentPage == totalPage || totalPage == 0 ? false : true; } }
然后建一个专用的bean:
package com.leatherstore.hibernate.domain; import java.util.List; import com.leatherstore.other.Page; public class Result { private Page page; //分页信息 private List content; //每页显示的集合 /** * The default constructor */ public Result() { super(); } /** * The constructor using fields * * @param page * @param content */ public Result(Page page, List content) { this.page = page; this.content = content; } /** * @return Returns the content. */ public List getContent() { return content; } /** * @return Returns the page. */ public Page getPage() { return page; } /** * @param content * The content to set. */ public void setContent(List content) { this.content = content; } /** * @param page * The page to set. */ public void setPage(Page page) { this.page = page; } }
然后在数据访问层写两个方法:
ProductDAO:
public List getProductByPage(Page page); public int getProductCount(); //返回数据的总数
ProductDAO的接口实现ProductDAOImpl:
//为了在spring里统一编程风格:我用的回调的方法 public List getProductByPage(final Page page) { return this.getHibernateTemplate().executeFind(new HibernateCallback(){ public Object doInHibernate(Session session) throws HibernateException, SQLException { Query query=session.createQuery("from Productinfo"); query.setFirstResult(page.getBeginIndex()); //hibernate分页的精髓 呵呵 query.setMaxResults(page.getEveryPage()); return query.list(); } }); } public int getProductCount() { List list=this.getHibernateTemplate().find("select count(*) from Productinfo"); return ((Integer)list.iterator().next()).intValue(); }
然后是业务层IProduct:
public Result listProduct(Page page);
然后IProduct接口的实现:IProductImpl:
private ProductDAO productDAO; public void setProductDAO(ProductDAO productDAO){ this.productDAO=productDAO; } public Result listProduct(Page page) { int totalRecords = this.productDAO.getProductCount(); page = PageUtil.createPage(page, totalRecords); List products = this.productDAO.getProductByPage(page); return new Result(page, products); }
Action
Page page = new Page(); //实例化一个page对象 page.setEveryPage(10); //设置每页显示的条数 page.setCurrentPage(1); //为第一页 Result result = pdp.productlist(page); request.setAttribute("page", pageinfo); request.setAttribute("productlist", list); return mapping.findForward("showProduct");
JSP
<logic:iterate id="product" name="productlist"> //中间迭代所要显示的数据 </logic:iterate> <tr> <td width="80" height="30"> </td> <logic:equal value="true" name="page" property="hasPrePage"> <td width="150" height="30"><div align="right"><a href="../product.do?method=showProductByTag&index=first&msg=${msg }">首页</a></div></td> <td width="80" height="30"><div align="center"><a href="../product.do?method=showProductByTag&index=prew&pageno=${page.currentPage -1}&msg=${msg }">上一页</a></div></td> </logic:equal> <logic:notEqual value="true" name="page" property="hasPrePage"> <td width="150" height="30"><div align="right">首页</div></td> <td width="80" height="30"><div align="center">上一页</div></td> </logic:notEqual> <logic:equal value="true" name="page" property="hasNextPage"> <td width="80" height="30"><div align="center"><a href="../product.do?method=showProductByTag&index=next&pageno=${page.currentPage +1 }&msg=${msg }">下一页</a></div></td> <td width="80" height="30"><div align="center"><a href="../product.do?method=showProductByTag&index=end&pageno=${page.totalPage }&msg=${msg }">尾页</a></div></td> </logic:equal> <logic:notEqual value="true" name="page" property="hasNextPage"> <td width="80" height="30"><div align="center">下一页</div></td> <td width="80" height="30"><div align="center">尾页</div></td> </logic:notEqual> <td height="30" colspan="3"><div align="center">页次${page.currentPage }/${page.totalPage } 共${page.totalCount }条记录</div> <div align="center"></div></td> </tr>
然后productAction里面的showProductByTag代码如下:
Page page = new Page(); page.setEveryPage(10); String pagemark = request.getParameter("goto"); if (pagemark == null) { String state = request.getParameter("index"); String pageno = request.getParameter("pageno"); System.out.println("pageno=" + pageno); if ("first".equals(state)) { page.setCurrentPage(1); Result result = pdp.productlist(page); request.setAttribute("page", result.getPage()); request.setAttribute("productlist", result.getContent()); } else if ("prew".equals(state)) { page.setCurrentPage(Integer.parseInt(pageno)); Result result = pdp.productlist(page); request.setAttribute("page", result.getPage()); request.setAttribute("productlist", result.getContent()); } else if ("next".equals(state)) { page.setCurrentPage(Integer.parseInt(pageno)); Result result = pdp.productlist(page); request.setAttribute("page", result.getPage()); request.setAttribute("productlist", result.getContent()); } else if ("end".equals(state)) { page.setCurrentPage(Integer.parseInt(pageno)); Result result = pdp.productlist(page); request.setAttribute("page", result.getPage()); request.setAttribute("productlist", result.getContent()); } } else { page.setCurrentPage(Integer.parseInt(pagemark)); Result result = pdp.productlist(page); request.setAttribute("page", result.getPage()); request.setAttribute("productlist", result.getContent()); } return mapping.findForward("showProduct");
相关推荐
SSH分页 分页 通用分页 struts2分页
好强大的ssh分页,封装的很好,适合初学者研究下,可以更快帮助初学者掌握分页机制,学起来不是很容易,但是当你学会了就豁然开朗,其他的分页直接可以藐视了,哈。。。我就是这样学过来的 有相关教程:...
SSH分页技术是Java Web开发中一种常见的数据处理方法,主要应用于大数据量的展示场景,如用户在浏览商品列表或论坛帖子时,通过分页来避免一次性加载所有数据导致的性能问题和用户体验下降。SSH指的是Spring、Struts...
在这个"SSH分页_完整例子"中,我们将深入探讨如何在SSH框架下实现数据的分页显示。 分页是Web应用程序中常见的功能,它能帮助用户更有效地浏览和处理大量数据。SSH框架通过整合Spring的事务管理和Hibernate的ORM...
在这个“很好的SSH分页小例子”中,我们将深入探讨SSH框架如何实现数据的分页显示,这对于处理大数据量的展示至关重要。 首先,让我们了解SSH框架的各自角色: 1. **Struts2**:这是一个MVC(Model-View-...
SSH分页技术是Java开发中一个非常实用的功能,尤其在处理大数据量的Web应用时,它能够有效地提高用户体验,避免一次性加载过多数据导致的性能问题。SSH是指Spring、Struts和Hibernate这三大开源框架的组合,它们在...
"SSH分页查询方法"是指在使用Struts2、Hibernate和Spring三大Java开发框架集成开发时实现的分页功能。 首先,Struts2是一个MVC(Model-View-Controller)框架,它负责处理用户请求并将其转发到相应的控制器,进而...
SSH分页则是指在使用这三个框架开发应用程序时,实现数据展示分页的一种技术手段。 **Struts** 是一个基于MVC设计模式的Web应用框架,主要用于控制视图与模型之间的交互。它提供了一种组织应用逻辑的方式,使得...
SSH分页插件的核心功能是将数据库查询结果按照一定的页码和每页记录数进行切割,使得用户可以逐页浏览,提高用户体验并减轻服务器负担。这个插件通常会集成到SSH框架中,通过简单的配置和调用,就能实现复杂的数据...
在这个场景中,"SSH分页组件"指的是在SSH框架下实现数据分页功能的组件。 分页是Web应用中常见的需求,特别是在处理大数据量时,为了提高用户体验和系统性能,需要将结果集分割成多个小部分(页)进行显示。SSH分页...
总的来说,"ssh 分页 控件 (分页插件)"是一个便捷的工具,能够帮助SSH框架的开发者在JSP页面中轻松实现数据分页功能,提升项目开发效率和用户体验。通过对分页插件的配置和使用,我们可以更专注于业务逻辑,而不用...
在SSH框架中实现分页功能是一项常见的任务,尤其是在处理大量数据时,分页能有效地提高用户体验,避免一次性加载过多数据导致页面响应慢。以下将详细介绍如何在SSH框架下创建分页程序,并探讨其优缺点。 首先,理解...
在这个名为"ssh.zip_SSH 数据分页_ssh分页实现"的压缩包中,我们可以看到一个关键的实践案例——如何在SSH框架下实现数据分页功能。数据分页在Web应用中极为重要,因为它能够帮助用户更有效地浏览大量信息,提高用户...
在这个名为"ssh.zip_SSH分页_ssh的分页实现"的压缩包中,我们关注的是SSH框架下的数据分页功能。 分页是大型Web应用程序中的一个关键特性,它允许用户以可管理的方式浏览大量数据,而不会被过长的列表压垮。在SSH...
在本实例中,我们将深入探讨SSH框架下的分页功能实现。 首先,让我们从Struts开始,它是SSH中的用户界面层,负责处理HTTP请求并返回相应的视图。在Struts中,我们可以创建一个Action类来处理分页请求。这个Action类...
总结起来,这个压缩包提供的SSH分页实例数据库MySQL连接,旨在帮助初学者掌握SSH框架在实际项目中的应用,尤其是如何利用SSH实现数据的CRUD操作和分页功能,对于提升Java Web开发技能具有很大价值。通过实践这个实例...
这个一个关于String+Spring+Hibernate框架,可以分页显示的实例代码.
按照 文档中的的内容轻松实现SSH分页,文档中包含 了 分页bean。直接复制即可使用。有详细的类和方法说明。
在这个特定的上下文中,"ssh 分页组件"指的是在SSH框架中实现数据分页的功能。数据分页在大型应用中尤为重要,因为它能有效地管理大量数据,避免一次性加载过多数据导致性能下降。 分页组件通常由两部分组成:前端...