Hibernate+Webwork2分頁初體驗

BaseHibernateDao.java 爲Hibernate DAO基本類
package com.wzj.framework.dao.hibernate;
       .......................................

/**
 * @desc DAO基本類,其他Business Dao從該類繼承
 * @author chikai
 * @link <a href="mailto:[email protected]">chikai</a>
 * @version $ BaseDao.java  2004-11-8 17:30:08 $
 * @version $ Project SHW-Framwork
 */
public abstract class BaseHibernateDao{
     ......
    /**
     * 根據HQL,當前頁數,頁面記錄數獲取相應的數據
     * @param hql Hibernate的sql格式
     * @return PageData 獲取組裝的頁面數據
     */
    public PageData getPageData(String hql, int cpage, int pageSize)throws DAOException{
        Session session = null;
        List results = null;
        PageData pagedata = null;
        int total;
        try {
            session = currentSession();
            Query query = session.createQuery(hql);
            total = query.list().size();
            results = query.setFirstResult((cpage-1) * pageSize)
            .setMaxResults(pageSize)
            .list();                    
            pagedata = new PageData(results,total,cpage,pageSize);
        }
        catch (HibernateException e) {
            log.error("Error in BaseDao.getPageData(String hql, int cpage, int pageSize)",e);
            throw new DAOException("Error in BaseDao.getPageData(String hql, int cpage, int pageSize)",e);
        }
        return pagedata;        
    } 
    ......
}
PageData .java爲頁面分頁數據封裝類
package com.wzj.framework.dao.hibernate;

import java.util.List;

/**
 * @desc 頁面數據(分頁程序)
 * @author chikai
 * @link <a href="mailto:[email protected]">chikai</a>
 * @version $ PageData.java  2004-11-22 14:54:47 $
 * @version $ Project SHW-Framwork 
public class PageData {
   
    private List results;
    //每頁顯示記錄數
    private int pageSize;
    //當前頁
    private int currentPage;
    //總記錄數
    private int total;
    //總頁數
    private int pageCount;
   
    public PageData(List results , int counts , int currentpage ,int pageSize){
       
        this.results = results;
        this.total = counts;
        this.currentPage = currentpage;
        this.pageSize = pageSize;      
    }
    /**
     * 獲取總記錄數
     * @return total
     */
    public int getTotal(){
        return total;
    }
    /**
     * 獲取總頁數
     * @return pageCount
     */
    public int getPageCount(){
        return ( total % pageSize!=0)?(pageCount=total/pageSize+1):(pageCount=total/pageSize);
    }
    /**
     * 判斷是否有下一頁
     * @return boolean;
     */
    public boolean isNextPage() {
        return results.size() > pageSize;
    }
    /**
     * 判斷是否有上一頁
     * @return boolean;
     */  
    public boolean isPreviousPage() {
        return currentPage > 0;
    }
    /**
     * 獲取指定頁記錄
     * @return results
     */
    public List getList() {
        return isNextPage() ?
                results.subList(0, pageSize-1) :
                    results;
    }
}
UserListAction.java 爲用戶列表Action類
package com.wzj.rbac.webwork.action;

import java.util.List;

import com.opensymphony.xwork.Action;
import com.opensymphony.xwork.ModelDriven;
import com.wzj.framework.dao.hibernate.PageData;
import com.wzj.framework.spring.resource.BeanLocator;
import com.wzj.rbac.ServiceFacade.UserService;
import com.wzj.rbac.domain.object.User;
/**
 * @desc 用戶列表
 * @author chikai
 * @link <a href="mailto:[email protected]">chikai</a>
 * @version $ UserListAction.java  2004-11-27 21:23:59 $
 * @version $ Project xwork
 */
public class UserListAction implements Action, ModelDriven {
   
    private UserService userService;
    private User user;
    private PageData pd;
    private int currentPage=1;
    private String pageCode;
    private List userLists;
    private int total;
    /* (non-Javadoc)
     * @see com.opensymphony.xwork.Action#execute()
     */
    public String execute() throws Exception {
       //此處爲調用用戶業務服務類,具體實現略去。。。
        userService = BeanLocator.getGlobalServiceLocator().getUserService();
        pd = userService.getUserList(currentPage,2);
        total = pd.getTotal();
        pageCode = genScrollPage(currentPage,pd.getPageCount());

        return SUCCESS;
    }
   
    /* (non-Javadoc)
     * @see com.opensymphony.xwork.ModelDriven#getModel()
     */
    public Object getModel() {
       
        return user;
    }
    public List getUserLists(){
        return pd.getList();
    }
    public void setCurrentPage(int i){
        this.currentPage = i;
    }
    public int getCurrentPage(){
        return this.currentPage;
    }
    public String getPageCode(){
        return pageCode;
    }
    public int getTotal(){
        return this.total;
    }
    /**
     * 頁面翻頁代碼
     * @param currPage
     * @param pageCount
     * @return String(翻頁代碼)
     */
    private String genScrollPage(int currPage , int pageCount){
        StringBuffer pageCode = new StringBuffer();
        if (currPage <= 1) {
            pageCode.append("<font color=/"#C0C0C0/">首頁</font>");
            pageCode.append("&nbsp;&nbsp;<font color=/"#C0C0C0/">前頁</font>");
        } else {
            pageCode.append("<a href=/"javascript:gotoPage(1);/">首頁</a>");
            pageCode.append("&nbsp;&nbsp;<a href=/"javascript:gotoPage(" + (currPage - 1) + ");/">前頁</a>");
        }
        if (currPage >= pageCount) {
            pageCode.append("&nbsp;&nbsp;<font color=/"#C0C0C0/">後頁</font>");
            pageCode.append("&nbsp;&nbsp;<font color=/"#C0C0C0/">末頁</font>");
        } else {
            pageCode.append("&nbsp;&nbsp;<a href=/"javascript:gotoPage(" + (currPage + 1) + ");/">後頁</a>");
            pageCode.append("&nbsp;&nbsp;<a href=/"javascript:gotoPage(" + pageCount + ");/">末頁</a>");
        }
        return pageCode.toString();
    }
}
View層爲一個JSP頁面:userList.jsp
<%@ page pageEncoding="gb2312" contentType="text/html;charset=gb2312"%>
<%@taglib prefix="ww" uri="webwork" %>
<html>
<link rel ="stylesheet" type="text/css" href="template/xhtml/styles.css" title="Style">
<body>
<form name="list" action="userlist.action" method="post">
<input type="hidden" name="currentPage" value="<ww:property value="currentPage"/>">
<ww:iterator value="userLists">

<ww:property value="id"/>
<ww:property value="username"/>
<br>

</ww:iterator>
<br>
<ww:property value="pageCode"/>
共<ww:property value="total"/>條記錄
</form>
</body>
</html>
<script>
 function gotoPage(pn)
 {
  var form = document.list;
  var obj = form.currentPage;
  obj.value = pn;
  form.submit();
 }
</script>


regular_smile.gif 呵呵,至此,一個偶認爲封裝頗完美的分頁程序就誕生了!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章