- 浏览: 129766 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
zzzhenyu:
您好,我现在也遇到了同样的问题,请问你后来知道为什么了吗?
error at ::0 can't find referenced pointcut allMethod
分页基本上是每个项目都会用到的模块。在这里我总结了一下网上主流的分页模式,自己做了一套。跟大家分享下
这个分页方法可以完成对任意表,任意查询条件的查询和分页。基本上可以代替项目中所有的数据库查询功能,当然只限于简单逻辑上的。初步整理,有什么不妥的地方还望大家指出、探讨。
首先是分页实体类:
- package engine.entity;
- import java.util.List;
- public class Pager {
- /**
- * 是否有上一页
- */
- private boolean hasPrePage;
- /**
- * 是否有下一页
- */
- private boolean hasNextPage;
- /**
- * 每页的数量
- */
- private int everyPage;
- /**
- * 总页数
- */
- private int totalPage;
- /**
- * 当前页
- */
- private int currentPage;
- /**
- * 起始点
- */
- private int beginIndex;
- /**
- * 总记录数
- */
- private int totalCount;
- /**
- * 该页名称
- */
- private String pageName;
- /**
- * 查询条件
- */
- private String conString;
- public String getConString() {
- return conString;
- }
- /**
- * 设置查询条件
- */
- public void setConString(String conditionString) {
- this .conString = conditionString;
- }
- /**
- * 设置该页名称(即查询表名)
- */
- public String getPageName() {
- return pageName;
- }
- public void setPageName(String tableName) {
- this .pageName = tableName;
- }
- public int getTotalCount() {
- return totalCount;
- }
- /**
- * 设置总记录数
- */
- public void setTotalCount( int totalCount) {
- this .totalCount = totalCount;
- }
- // construct the page by everyPage
- public Pager( int everyPage){
- this .everyPage = everyPage;
- }
- //The whole constructor
- public Pager( boolean hasPrePage, boolean hasNextPage,
- int everyPage, int totalPage,
- int currentPage, int beginIndex, int totalCount,
- String pageName,String conString) {
- this .hasPrePage = hasPrePage;
- this .hasNextPage = hasNextPage;
- this .everyPage = everyPage;
- this .totalPage = totalPage;
- this .currentPage = currentPage;
- this .beginIndex = beginIndex;
- this .totalCount = totalCount;
- this .pageName = pageName;
- this .conString = conString;
- }
- public int getBeginIndex() {
- return beginIndex;
- }
- /**
- * 设置起始点
- */
- public void setBeginIndex( int beginIndex) {
- this .beginIndex = beginIndex;
- }
- public int getCurrentPage() {
- return currentPage;
- }
- /**
- * 设置当前页
- */
- public void setCurrentPage( int currentPage) {
- this .currentPage = currentPage;
- }
- public int getEveryPage() {
- return everyPage;
- }
- /**
- * 设置每页的数量
- */
- public void setEveryPage( int everyPage) {
- this .everyPage = everyPage;
- }
- /**
- * 是否有下一页
- */
- public boolean getHasNextPage() {
- return hasNextPage;
- }
- public void setHasNextPage( boolean hasNextPage) {
- this .hasNextPage = hasNextPage;
- }
- /**
- * 是否有上一页
- */
- public boolean getHasPrePage() {
- return hasPrePage;
- }
- public void setHasPrePage( boolean hasPrePage) {
- this .hasPrePage = hasPrePage;
- }
- public int getTotalPage() {
- return totalPage;
- }
- /**
- * 设置总页数
- */
- public void setTotalPage( int totalPage) {
- this .totalPage = totalPage;
- }
- }
然后创建分页结果集(将分页结果打包,便于访问):
- package engine.entity;
- import java.util.List;
- public class Result {
- private Pager pager;
- private List content;
- //The default constructor
- public Result() {
- super ();
- }
- /**
- * @param 分页信息
- * @param 每页显示的集合
- */
- public Result(Pager pager, List content) {
- this .pager = pager;
- this .content = content;
- }
- public List getContent() {
- return content;
- }
- public Pager getPager() {
- return pager;
- }
- public void setContent(List content) {
- this .content = content;
- }
- public void setPager(Pager pager) {
- this .pager = pager;
- }
- }
构建一个page的工厂PageUtil(处理分页相关计算):
- package engine;
- import engine.entity.Pager;
- public class PagerUtil {
- // Use the origin page to create a new page
- public static Pager createPage(Pager page, int totalRecords) {
- return createPage(page.getEveryPage(), page.getCurrentPage(),page.getPageName(),
- page.getConString(),totalRecords);
- }
- //the basic page utils not including exception handler
- public static Pager createPage( int everyPage, int currentPage,
- String pageName,String conString,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);
- System.out.println(everyPage+"*" +totalPage+ "*" +
- currentPage+"*" +beginIndex+ "*" +totalRecords);
- return new Pager(hasPrePage, hasNextPage, everyPage, totalPage,
- currentPage, beginIndex, totalRecords, pageName, conString);
- }
- 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 ;
- }
- }
数据访问层接口:
- package hibernate.dao;
- import java.util.List;
- import engine.entity.Pager;
- public interface PagerProductDAO {
- public void setPager(Pager pager);
- /**
- * @return 分页后的数据
- */
- public List getProductByPage();
- /**
- * 不使用分页
- * @return 所有符合条件的数据
- */
- public List getProducts();
- /**
- * @return 数据的总数
- */
- public int getProductCount();
- }
数据访问层接口实现:
- package hibernate.dao;
- import java.sql.SQLException;
- import java.util.List;
- import org.hibernate.HibernateException;
- import org.hibernate.Query;
- import org.hibernate.Session;
- import org.springframework.orm.hibernate3.HibernateCallback;
- import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
- import engine.entity.Pager;
- public class PagerProductDAOImpl extends HibernateDaoSupport implements PagerProductDAO {
- Pager pager;
- public Pager getPager() {
- return pager;
- }
- public void setPager(Pager page) {
- this .pager = page;
- }
- public List getProductByPage() {
- // TODO Auto-generated method stub
- return getHibernateTemplate().executeFind( new HibernateCallback(){
- public Object doInHibernate(Session session) throws HibernateException, SQLException {
- Query query=session.createQuery("from " +pager.getPageName()+ " where " +pager.getConString());
- query.setFirstResult(pager.getBeginIndex()); //hibernate分页的精髓
- query.setMaxResults(pager.getEveryPage());
- return query.list();
- }
- });
- }
- public List getProducts(){
- return getHibernateTemplate().find( "from " +pager.getPageName()+ " where " +pager.getConString());
- }
- public int getProductCount() {
- // TODO Auto-generated method stub
- List list=getHibernateTemplate().find("from " +pager.getPageName()+ " where " +pager.getConString());
- return ((Integer)list.size()).intValue();
- }
- }
业务层接口:
- package engine;
- import engine.entity.Pager;
- import engine.entity.Result;
- public interface PagerProduct {
- public Result listProduct(Pager pager);
- }
业务层接口实现:
- package engine.impl;
- import java.util.List;
- import engine.PagerProduct;
- import engine.PagerUtil;
- import engine.entity.Pager;
- import engine.entity.Result;
- import hibernate.dao.PagerProductDAO;
- public class PagerProductImpl implements PagerProduct {
- private PagerProductDAO pagerProductDAO;
- public PagerProductDAO getPagerProductDAO() {
- return pagerProductDAO;
- }
- public void setPagerProductDAO(PagerProductDAO pagerProductDAO) {
- this .pagerProductDAO = pagerProductDAO;
- }
- public Result listProduct(Pager pager) {
- // TODO Auto-generated method stub
- this .pagerProductDAO.setPager(pager);
- List products=null ;
- if (pager.getEveryPage()== 0 ){
- //不使用分页
- products = this .pagerProductDAO.getProducts();
- }
- else {
- int totalRecords = this .pagerProductDAO.getProductCount();
- pager = PagerUtil.createPage(pager, totalRecords);
- //载入新生产的page
- this .pagerProductDAO.setPager(pager);
- products = this .pagerProductDAO.getProductByPage();
- }
- return new Result(pager, products);
- }
- }
呼~~终于到productAction啦
- public class PlaceAction extends DispatchAction {
- private PagerProduct pagerProduct;
- public PagerProduct getPagerProduct() {
- return pagerProduct;
- }
- public void setPagerProduct(PagerProduct pagerProduct) {
- this .pagerProduct = pagerProduct;
- }
- public ActionForward find(ActionMapping mapping, ActionForm form,
- HttpServletRequest request, HttpServletResponse response)
- throws Exception {
- Pager pager=new Pager(10); //设置每页10条记录。若不想使用分页设为0即可
- String tableName="Place" ; //查询Place表
- pager.setPageName(tableName);
- String conditionString="Place_id>0" ; //设置查询条件即sql中where后面的语句
- pager.setConString(conditionString);
- int pageNum=1; //当前显示第1页
- pager.setCurrentPage(pageNum);
- Result result = pagerProduct.listProduct(pager);
- //获取新的page,此时的page已经包所有的信息
- pager = result.getPager();
- request.setAttribute("PlaceView" , result);
- return mapping.findForward( "PlaceView" );
- }
- }
在jsp页面中
- <%@ page language= "java" pageEncoding= "gb2312" %>
- <%@ taglib uri="http://struts.apache.org/tags-bean" prefix= "bean" %>
- <%@ taglib uri="http://struts.apache.org/tags-logic" prefix= "logic" %>
- <bean:define id="list" name= "PlaceView" property= "content" type= "java.util.List" ></bean:define>
- <bean:define id="pager" name= "PlaceView" property= "pager" type= "engine.entity.Pager" ></bean:define>
- <bean:define id="hasNextPage" name= "pager" property= "hasNextPage" type= "java.lang.Boolean" ></bean:define>
- <bean:define id="hasPrePage" name= "pager" property= "hasPrePage" type= "java.lang.Boolean" ></bean:define>
- <logic:empty name="list" >
- <div id="empty" >
- <table border="0" >
- <tr>
- <td colspan="6" >没有可以显示的数据</td>
- </tr>
- </table>
- </div>
- </logic:empty>
- <logic:notEmpty name="list" >
- <logic:iterate id="i" name= "list" >
- <div id="place_${i.placeId }" >
- <table border="0" >
- <tr>
- <td>
- <input type="checkbox" name= "selectFlag" value= "${i.placeId }" >
- </td>
- <td>${i.placeId }</td>
- <td>${i.placeName }</td>
- <td>${i.placeNotes }</td>
- </tr>
- </table>
- </div>
- </logic:iterate>
- </logic:notEmpty>
- <logic:equal value="false" name= "hasPrePage" >
- <span>[上一页]</span>
- </logic:equal>
- <logic:equal value="true" name= "hasPrePage" >
- <span><a href="javascript:changePage(${pager.currentPage-1 })" mce_href= "javascript:changePage(${pager.currentPage-1 })" >[上一页]</a></span>
- </logic:equal>
- ${pager.currentPage }/${pager.totalPage }
- <logic:equal value="false" name= "hasNextPage" >
- <span>[下一页]</span>
- </logic:equal>
- <logic:equal value="true" name= "hasNextPage" >
- <span><a href="javascript:changePage(${pager.currentPage+1 })" mce_href= "javascript:changePage(${pager.currentPage+1 })" >[下一页]</a></span>
- </logic:equal>
这样所有的分页功能就完成了,至于changePage()这个JavaScript函数就是处理翻页的动作啦,大家应该都知道了吧,就不多说了。
转载From:http://blog.csdn.net/hytfly/article/details/5787462
发表评论
-
PHP实现翻页处理的类
2012-02-18 11:55 524PHP实例源代码:PHP实现翻页处理的类 <?php ... -
include_once()
2012-02-18 11:50 704The include_once() 语句在脚本执行期间包含并 ... -
SSH中文乱码
2012-01-03 17:49 644具体的解决方法: ①修改Tomcat----> ... -
Hibernate+Spring+Struts2整合开发中的一个分页显示方案
2011-12-30 16:59 834分页显示一直是web开发中一大烦琐的难题,传统 ... -
Struts2 Spring3 hibernate3三个框架的集成
2011-12-23 17:28 731刚学SSH,现在来谈谈SSH的集成 首先是jar的导入,无可置 ... -
SSH整合包详解.Struts2.2.3+Spring3.1.0.M2+Hibernate3.6.6
2011-12-19 21:54 600以下是偶整理出来的比较新的SSH一些基本的包,基本上适用没 ...
相关推荐
好强大的ssh分页,封装的很好,适合初学者研究下,可以更快帮助初学者掌握分页机制,学起来不是很容易,但是当你学会了就豁然开朗,其他的分页直接可以藐视了,哈。。。我就是这样学过来的 有相关教程:...
SSH分页 分页 通用分页 struts2分页
因此,分页功能成为了一个必要的优化手段。 SSH分页插件的核心功能是将数据库查询结果按照一定的页码和每页记录数进行切割,使得用户可以逐页浏览,提高用户体验并减轻服务器负担。这个插件通常会集成到SSH框架中,...
3. **Hibernate**:是一个强大的ORM(对象关系映射)框架,负责将Java对象与数据库中的表进行映射,简化了数据库操作。在分页中,Hibernate提供查询功能,以获取指定范围内的数据。 分页实现步骤如下: 1. **配置*...
这里提到的“非常强大的SSH分页”可能指的是一个用于Java后端开发的SSH(Spring、Struts2、Hibernate)框架中的高效分页实现。 首先,我们来看一下提供的`Page`类,这是一个简单的分页对象,包含了分页所需的基本...
"SSH分页查询方法"是指在使用Struts2、Hibernate和Spring三大Java开发框架集成开发时实现的分页功能。 首先,Struts2是一个MVC(Model-View-Controller)框架,它负责处理用户请求并将其转发到相应的控制器,进而...
3. **编写分页服务**: 在Service层,创建一个接口和实现类,定义分页查询的方法。这个方法接收页码和每页条数作为参数,调用DAO层的分页查询方法,返回分页结果。 4. **视图层处理**: 在Struts2的Action类中,调用...
综上所述,SSH分页是Java企业级开发中的一个重要技术,它涉及到了Struts的控制层、Hibernate的数据访问层和Spring的整合及服务层,是提升应用性能和用户体验的关键手段之一。通过熟练掌握SSH分页,开发者可以更高效...
总的来说,"ssh 分页 控件 (分页插件)"是一个便捷的工具,能够帮助SSH框架的开发者在JSP页面中轻松实现数据分页功能,提升项目开发效率和用户体验。通过对分页插件的配置和使用,我们可以更专注于业务逻辑,而不用...
SSH(Struts + Spring + Hibernate)是一个经典的Java Web开发框架,它将MVC设计模式、依赖注入和持久层管理结合在一起,提供了强大的企业级应用开发能力。在这个"SSH分页_完整例子"中,我们将深入探讨如何在SSH框架...
无刷新分页技术是现代网页设计中的一个重要特性,它允许用户在不重新加载整个页面的情况下浏览页面的不同部分。在SSH框架中实现这一功能,通常会用到AJAX(Asynchronous JavaScript and XML)技术。AJAX可以向服务器...
SSH分页技术是Java Web开发中一种常见的数据处理方法,主要应用于大数据量的展示场景,如用户在浏览商品列表或论坛帖子时,通过分页来避免一次性加载所有数据导致的性能问题和用户体验下降。SSH指的是Spring、Struts...
在Struts中,我们可以创建一个Action类来处理分页请求。这个Action类会接收前端传来的参数,如当前页数和每页显示的数量,然后调用业务层进行处理。 Spring作为应用上下文和依赖注入框架,负责管理对象的生命周期和...
在分页场景中,我们需要创建一个专门的分页Action,该Action接收请求参数(如当前页数、每页条数),并调用服务层方法获取相应的分页数据。 Spring作为IoC/DI容器,负责管理对象的生命周期和依赖关系。在分页实例中...
SSH分页技术是Java开发中一个非常实用的功能,尤其在处理大数据量的Web应用时,它能够有效地提高用户体验,避免一次性加载过多数据导致的性能问题。SSH是指Spring、Struts和Hibernate这三大开源框架的组合,它们在...
这个项目为初学者提供了一个实践平台,通过学习和理解这三种分页方法,可以更好地掌握SSH框架在处理复杂业务场景时的能力。 压缩包内的SSHPaginationDemo文件可能包含以下几个关键部分: 1. **Action类**:实现了...
SSH(Struts + Spring + Hibernate)是Java Web开发中常用的一种技术栈,它结合了三个强大的开源框架:Struts作为MVC(Model-View-Controller)框架,Spring提供依赖注入和事务管理,Hibernate则用于对象关系映射。...
这个压缩包提供了一个使用SSH框架实现分页功能的完整实例,结合了MySQL数据库进行数据操作,非常适合初学者进行学习和实践。 首先,让我们深入理解SSH框架的核心组件: 1. **Struts2**:作为MVC(模型-视图-控制器...
在给定的文件中,`Page.java`可能是一个代表分页信息的实体类,包含如当前页码、每页记录数、总记录数、总页数等属性,以及相应的getter和setter方法。这样的类有助于封装分页参数,并在前后端之间传递。 `...
总的来说,这个"SSH分页源代码"实例是一个学习如何在Java Web环境中整合SSH框架,并利用它们处理分页问题的好资源。通过分析和理解源代码,开发者可以加深对SSH框架的理解,提升在实际项目中的应用能力。