Hibernate+Webwork2分页初体验

来源:互联网 发布:捉鬼大师软件 编辑:程序博客网 时间:2024/05/16 17:06

BaseHibernateDao.java 为Hibernate DAO基本类
package com.wzj.framework.dao.hibernate;
       .......................................

/**
 * @desc DAO基本类,其他Business Dao从该类继承
 * @author chikai
 * @link <a href="mailto:wzj616@etang.com">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:wzj616@etang.com">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:wzj616@etang.com">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>


 呵呵,至此,一个偶认为封装颇完美的分页程序就诞生了!

原创粉丝点击