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(" <font color=/"#C0C0C0/">前页</font>");
} else {
pageCode.append("<a href=/"javascript:gotoPage(1);/">首页</a>");
pageCode.append(" <a href=/"javascript:gotoPage(" + (currPage - 1) + ");/">前页</a>");
}
if (currPage >= pageCount) {
pageCode.append(" <font color=/"#C0C0C0/">后页</font>");
pageCode.append(" <font color=/"#C0C0C0/">末页</font>");
} else {
pageCode.append(" <a href=/"javascript:gotoPage(" + (currPage + 1) + ");/">后页</a>");
pageCode.append(" <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>
呵呵,至此,一个偶认为封装颇完美的分页程序就诞生了!