SSH分页技术(转自施杨)

 

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

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

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;
        }
public  PageBean getBean( int  pageNO)
        {
             *****  jg;
             DetachedCriteria dc  =  DetachedCriteria.forClass( ***** . class );
            PageBean pb = collegeDao.getPageBean(dc,pageNO, 15 );        
             return  pb;
        }

 

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

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

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

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

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

分页的util类:

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;
    }
    

}

 

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

/*
 * 施杨的分页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;
    }
}

 

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

 

// 管理员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();
    
}

 

实现类AdminServiceImpl.java

 

// 管理员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);
    }
}

 

 struts的action层AdminAction.java

 

// 管理员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 " );
           
    }
}

 

结构清晰,也很实用。

页面lookAdmin.jsp

 

<% @ 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 >
             < a  href ="./admin/addAdmin.jsp" > 添加管理员 </ a >
             < br >
             < a  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 >
                 < a  href ="./editAdmin.do?aid=<c:out value=" ${admin.aid}" /> ">修改 </ a >
                 &nbsp;&nbsp;
                 < a  href ="./deleteAdmin.do?aid=<c:out value=" ${admin.aid}" /> " οnclick="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  name ="myPage"  property ="hasPreviousPage"  value ="true" >
            < a  href ="./AdminPage.do?pno=<bean:write name=" myPage" property ="prePage" /> ">上一页 </ a >
       </ logic:equal >
           
           每页 < bean:write  name ="myPage"  property ="pageSize" /> 条记录
           共 < bean:write  name ="myPage"  property ="rowCount" /> 条记录
                当前第( < bean:write  name ="myPage"  property ="currentPage" /> / < bean:write  name ="myPage"  property ="totalPage" /> )页
         < logic:equal  name ="myPage"  property ="hasNextPage"  value ="false" > 下一页 </ logic:equal >
         < logic:equal  name ="myPage"  property ="hasNextPage"  value ="true" >
          < a  href ="./AdminPage.do?pno=<bean:write name=" myPage" property ="nextPage" /> ">下一页 </ a >
         </ logic:equal >
            < a  href ="./AdminPage.do?pno=<bean:write name='myPage' property='totalPage'/>" > 末页 </ a >
         </ logic:present >
       </ td >
       </ tr >
     </ table >
         </ center >
     </ body >
</ html >

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值