`

SSH超实用分页实现(原创开源)!

阅读更多

SSH的分页网上有不少的例子,有利用session的,有利用分页组件的。我几个师兄原来搞的SSH项目也有一个成熟的分页插件。

具体业务实现类中的分页方法:

<bgsound cep="0">public List get*****(int pageNO){
            DetachedCriteria dc 
= DetachedCriteria.forClass(****.class);            
            List list
=*****Dao.getList(dc,pageNO,15);
            
int a = 0;
            
if (list.equals(null)){a=1;}
            
return list;
        }
</bgsound>
<bgsound cep="1">public PageBean getBean(int pageNO)
        {
            
***** jg;
             DetachedCriteria dc 
= DetachedCriteria.forClass(*****.class);
            PageBean pb
=collegeDao.getPageBean(dc,pageNO,15);        
            
return pb;
        }
</bgsound>

 

然后是一个PageBean的工具类,负责创建分页属性和基本逻辑。

然后是页面的bean获取输出信息及分页属性。

我觉得单纯的拷贝,自己用的不是很顺手。于是自己也搞了一个,个人认为可以清晰的分层,实现这个分页。分层还是传统的SSH七层结构。

SSH结构思想参考我的另一篇随笔SSH思想之我见!

下面是分页思想,一个初始化方法和一个分页实现方法:

分页的util类:

<bgsound cep="2">package com.sy.util;

import java.util.List;
@SuppressWarnings(
"unchecked")
public class Page {

    
private int pageSize;
    
private int totalPage; 
    
private int rowCount;
    
private int currentPage;
    
private int prePage; 
    
private int nextPage;
    
private boolean hasNextPage;
    
private boolean hasPreviousPage;
    
private List list;

    
public Page() {
        
this.pageSize=10;
    }

    
public int getPageSize() {
        
return pageSize;
    }

    
public void setPageSize(int pageSize) {
        
this.pageSize = pageSize;
    }

    
public int getTotalPage() {
        
return totalPage;
    }

    
public void setTotalPage(int totalPage) {
        
this.totalPage = totalPage;
    }

    
public int getRowCount() {
        
return rowCount;
    }

    
public void setRowCount(int rowCount) {
        
this.rowCount = rowCount;
    }

    
public int getCurrentPage() {
        
return currentPage;
    }

    
public void setCurrentPage(int currentPage) {
        
this.currentPage = currentPage;
    }

    
public int getPrePage() {
        
return prePage;
    }

    
public void setPrePage(int prePage) {
        
this.prePage = prePage;
    }

    
public int getNextPage() {
        
return nextPage;
    }

    
public void setNextPage(int nextPage) {
        
this.nextPage = nextPage;
    }

    
public boolean isHasNextPage() {
        
return hasNextPage;
    }

    
public void setHasNextPage(boolean hasNextPage) {
        
this.hasNextPage = hasNextPage;
    }

    
public boolean isHasPreviousPage() {
        
return hasPreviousPage;
    }

    
public void setHasPreviousPage(boolean hasPreviousPage) {
        
this.hasPreviousPage = hasPreviousPage;
    }

    
public List getList() {
        
return list;
    }

    
public void setList(List list) {
        
this.list = list;
    }
    

}
</bgsound>

 

分页的数据库操作和逻辑判断我把他单独用一个PageDaoImpl来实现:

<bgsound cep="3">/*
 * 施杨的分页daoimpl类 
 * 
*/
package com.sy.dao.impl;

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 com.sy.dao.BaseDao;
import com.sy.util.Page;

@SuppressWarnings(
"unchecked")
public class PageDaoImpl extends HibernateDaoSupport {

    
private String hql;
    
public Page page;
    
public int start;
    
public BaseDao dao;
    
public void setDao(BaseDao dao) {
        
this.dao = dao;
    }

    
public void init(int start,String tableName){    // ͨ��init����ʵ����ij�ʼ��
       page = new Page();
       
this.hql = "from "+tableName;
       
this.start = start;
       setRowCount();
       setTotalPage();
       setCurrentPage();
       setPrePage();
       setNextPage();
       setPreOrNextBoolean();
    }

    
public int getRowCount(){
       List list 
= dao.find(hql);
       
if(list.isEmpty()){
        
return 0;
       }
       
return list.size();
    }

    
public Page getPage(){
       List list 
= (List)getHibernateTemplate().execute(new HibernateCallback(){
        
public Object doInHibernate(Session session) throws HibernateException, SQLException {
         Query query 
= session.createQuery(hql);
         query.setFirstResult(getStartIndex());
         query.setMaxResults(page.getPageSize());
         
return query.list();
        }   
       });
       page.setList(list);
       
return page;
    }
    
    
public void setPreOrNextBoolean() {
        
if (page.getCurrentPage() <= 1) {
            page.setHasPreviousPage(
false);
        } 
else {
            page.setHasPreviousPage(
true);
        }
        
if (page.getCurrentPage() >= page.getTotalPage()) {
            page.setHasNextPage(
false);
        } 
else {
            page.setHasNextPage(
true);
        }
    }

    
public void setCurrentPage() {
        
if (start < 1) {
            page.setCurrentPage(
1);
        }
        
if (start > page.getTotalPage()) {
            page.setCurrentPage(page.getTotalPage());
        }
        page.setCurrentPage(start);
    }

    
public void setPrePage() {
        page.setPrePage(page.getCurrentPage() 
- 1);
    }

    
public void setNextPage() {
        page.setNextPage(page.getCurrentPage() 
+ 1);
    }

    
public void setTotalPage() {
        
int rowCount = getRowCount();
        
int pageSize = page.getPageSize();
        
if (rowCount > pageSize) {
            
if (rowCount % pageSize == 0) {
                page.setTotalPage(rowCount 
/ pageSize);
            } 
else {
                page.setTotalPage(
1 + (rowCount / pageSize));
            }
        } 
else {
            page.setTotalPage(
1);
        }
    }

    
public void setRowCount() {
        page.setRowCount(getRowCount());
    }

    
public int getStartIndex() {
        
int startIndex = 0;
        
if (start < 0) {
            startIndex 
= 0;
        } 
else {
            
if (start > page.getTotalPage()) {
                startIndex 
= page.getPageSize() * (page.getTotalPage() - 1);
            } 
else {
                startIndex 
= page.getPageSize() * (start - 1);
            }
        }
        
return startIndex;
    }
}
</bgsound>

 

然后是业务层接口,举例AdminService.java

 

<bgsound cep="4">//管理员service层接口
package com.sy.service;

import java.util.List;

import com.sy.util.Page;
import com.sy.vo.Admin;

public interface AdminService extends BaseService{

    
    
//分页初始化
    public void init(int pno);
//分页实现
    public Page getPage();
    
}
</bgsound>

 

实现类AdminServiceImpl.java

 

<bgsound cep="5">//管理员service层实现类
package com.sy.service.impl;

import java.util.List;

import com.sy.dao.impl.AdminDaoImpl;
import com.sy.dao.impl.PageDaoImpl;
import com.sy.service.AdminService;
import com.sy.util.Page;
import com.sy.vo.Admin;

@SuppressWarnings(
"unchecked")
public class AdminServiceImpl extends BaseServiceImpl implements AdminService {

        .

    
public Page getPage() {
        
return Pdao.getPage();
    }
    
public void init(int pno) {
        String tableName
="Admin";
        Pdao.init(pno,tableName);
    }
}
</bgsound>

 

 struts的action层AdminAction.java

 

<bgsound cep="6">//管理员action实现类
package com.sy.action;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;

import com.sy.form.AdminForm;
import com.sy.form.LoginForm;
import com.sy.service.AdminService;
import com.sy.util.MD5;
import com.sy.util.Page;
import com.sy.vo.Admin;
@SuppressWarnings(
"unchecked")
public class AdminAction extends BaseAction {

        .
//查看管理员
    public ActionForward listAdmins(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) {
        AdminService as
=(AdminService)super.getBean("AdminService");
           
int pno = (new Integer(request.getParameter("pno"))).intValue();
           as.init(pno);
           Page myPage 
= as.getPage();
           List myList 
= as.getPage().getList(); 
           request.setAttribute(
"myPage", myPage);
           request.setAttribute(
"AdminList", myList);
           
return mapping.findForward("show");
           
    }
}
</bgsound>

 

结构清晰,也很实用。

页面lookAdmin.jsp

 

<bgsound cep="7"><%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles" %>
<html>
    
<head>
        
<meta http-equiv="Content-Language" content="zh-cn">
        
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        
<title>施杨SSH新闻发布</title>
    
</head>
    
<body>
        
<center>
            
<h3>
                查看管理员
            
</h3>
            
<br>
            
<href="./admin/addAdmin.jsp">添加管理员</a>
            
<br>
            
<href="./NewsPage2.do?pno=1">查看新闻</a>
            
<br>
            
<table border="2" width="600">
                
<tr>
                    
<td>
                        用户名
                    
</td>
                    
<td>
                        密码
                    
</td>
                    
<td>
                        操作
                    
</td>
                
</tr>
    
<c:forEach items="${requestScope['AdminList']}" var="admin">
            
<tr align="center">
              
<td width="20%" height="10"><c:out value="${admin.aname}" /></td>
              
<td width="20%" height="10"><c:out value="${admin.apassword}" /></td>
              
<td>
                
<href="./editAdmin.do?aid=<c:out value="${admin.aid}"/>">修改</a>
                
&nbsp;&nbsp;
                
<href="./deleteAdmin.do?aid=<c:out value="${admin.aid}"/>" onclick="javascript:return confirm('您确定删除吗?')">删除</a>
              
</td>
            
</tr>
    
</c:forEach>
    
</table>
    
<table align="center" width="500">
    
<tr>
       
<td align="center" colspan="10">
          
<logic:present name="myPage">
            
<html:link page="/AdminPage.do?pno=1">首页</html:link>
          
<logic:equal name="myPage" property="hasPreviousPage" value="false">上一页</logic:equal>
          
<logic:equal 
分享到:
评论
1 楼 hellostory 2012-03-14  
高级查询的查询参数放哪里?

相关推荐

    ssh.zip_SSH分页_ssh的分页实现

    好的ssh分页代码,也是经典的分页开源代码!

    ssh+分页(pager-taglib)

    本资源融合了struts+spring+hibernate的集成,并充分运用jsp开源分页标签(pager-taglib)进行了分页。支持多条件的分页查询。由于上传大小限制,本人被迫将所用到的jar包目录删除,所需的几个必备jar包我已留在本...

    入门级SSH项目—简易图书管理系统

    用户可以对图书进行添加、修改、删除,并且实现了全部查询和分页查询的功能。 2、实现了用户状态拦截器,当用户登录后,将用户保存在session中,在用户进行操作时会对session中的用户进行检查,若发现用户不存在即...

    java开源包6

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包9

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包8

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包10

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    ssh框架的搭建

    ssh开源框架的搭建,含分页,事务管理 &lt;param-name&gt;contextConfigLocation /WEB-INF/applicationContext-*.xml,/WEB-INF/action-servlet.xml &lt;param-name&gt;log4jConfigLocation &lt;param-value&gt;/WEB-INF/...

    开源的物料资源管理系统

    本系统采用的是ssh框架,实现了对物料信息的增删改查,以及分页和图片的上传等。

    SSH整合(Spring+Shiro+Hibernate) - 你会喜欢的

    给大家分享一个前几年闲着蛋疼写(应该叫整合吧)的一个WEB应用框架,整合了Spring,使用的是SpringMVC,而不是Struts,Java开源框架Shiro,持久层框架Hibernate。实现的主要功能有,用户的管理,角色管理,可配置的...

    JAVA上百实例源码以及开源项目

     Java语言开发的简洁实用的日期选择控件,源码文件功能说明:  [DateChooser.java] Java 日期选择控件(主体类) [public]  [TablePanel.java] 日历表格面板  [ConfigLine.java] 控制条类  [RoundBox.java] ...

    java开源包3

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包4

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    JAVA上百实例源码以及开源项目源代码

    Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,日期选择 Java语言开发的简洁实用的日期选择控件,源码文件功能说明: [DateChooser.java] Java 日期选择控件(主体类) [public] ...

    java开源包1

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包2

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包5

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包11

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包7

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

Global site tag (gtag.js) - Google Analytics