public void listByPage(String sql,PageResult pageResult);  CommonDAO
public void listByPage(String sql,PageResult pageResult)    CommonDAOImpl
 {
  if(sql==null)
  {
   return;
  }
  Query query=this.getSession().createQuery(sql);
  query.setFirstResult(pageResult.getFirstRec()); //第一页
  query.setMaxResults(pageResult.getPageSize());
  List ret=query.list();
  pageResult.setList(ret);
  String queryString="";
  if(sql.toUpperCase().indexOf("SELECT") !=-1)
  {
   int i=query.getQueryString().toUpperCase().indexOf("FROM");
   queryString="Select count(*)"+sql.substring(i,sql.length());
  }
  else
  {
   queryString="Select count(*)"+sql;
  }
  //去掉Order by部分
  int j=queryString.toUpperCase().lastIndexOf("ORDER");
  if(j!=-1)
  {
   queryString=queryString.substring(0,j);
  }
  Query cquery=this.getSession().createQuery(queryString);
  cquery.setCacheable(true);
  int recTotal= ((Integer)cquery.iterate().next()).intValue();
  pageResult.setRecTotal(recTotal);
 }
 private PageResult pageResult=new PageResult();           BaseForm
 public PageResult getPageResult() {
  return pageResult;
 }
 public void setPageResult(PageResult pageResult) {
  this.pageResult = pageResult;
 } 
                                                                   taglib.PaninationTag
public int doEndTag() {
  try {
   BaseForm oForm = null;
   if (form!=null && !"".equals(form.trim())){
    oForm = (BaseForm) pageContext.getRequest().getAttribute(form);
    if (null==oForm){
     oForm = (BaseForm) pageContext.getSession().getAttribute(form);
    }
    if (oForm!=null){
     PageResult pageResult = oForm.getPageResult();
     StringBuffer sb = new StringBuffer();
     sb.append("<div style=\"text-align:right;padding:6px 6px 0 0;\">\r\n") 
     .append("共"+pageResult.getRecTotal()+"条记录&nbsp;\r\n") 
     .append("每页显示<input name=\"pageResult.pageSize\" value=\""+pageResult.getPageSize()+"\" size=\"3\" />条&nbsp;\r\n")
     .append("第<input name=\"pageResult.pageNo\" value=\""+pageResult.getPageNo()+"\" size=\"3\" />页")
     .append(" / 共"+pageResult.getPageTotal()+"页 \r\n")
     .append("<a href=\"javascript:page_first();\">第一页</a> \r\n")
     .append("<a href=\"javascript:page_pre();\">上一页</a>\r\n")
     .append("<a href=\"javascript:page_next();\">下一页</a> \r\n")
     .append("<a href=\"javascript:page_last();\">最后一页</a>\r\n")
     .append("<input type=\"button\" onclick=\"javascript:page_go();\" value=\"转到\" />\r\n")
     .append("<input type=\"hidden\" name=\"pageResult.orderBy\"  value=\""+pageResult.getOrderBy()+"\" />\r\n")
     .append("<input type=\"hidden\" name=\"pageResult.sort\"  value=\""+pageResult.getSort()+"\" />\r\n")
     .append("<script>\r\n")
     .append(" var pageTotal = "+pageResult.getPageTotal()+";\r\n")
     .append(" var recTotal = "+pageResult.getRecTotal()+";\r\n")
     .append("</script>\r\n")
     .append("</div>\r\n");
     sb.append("<script>\r\n");
     sb.append("function page_go()\r\n")
     .append("{\r\n")
     .append(" page_validate();  \r\n")
     .append(" document.forms[0].submit();\r\n")
     .append("}\r\n")
     .append("function page_first()\r\n")
     .append("{\r\n")
     .append(" document.forms[0].elements[\"pageResult.pageNo\"].value = 1;\r\n")
     .append(" document.forms[0].submit();\r\n")
     .append("}\r\n")
     .append("function page_pre()\r\n")
     .append("{\r\n")
     .append(" var pageNo = document.forms[0].elements[\"pageResult.pageNo\"].value;\r\n")
     .append(" document.forms[0].elements[\"pageResult.pageNo\"].value = parseInt(pageNo) - 1;\r\n")
     .append(" page_validate();\r\n")
     .append(" document.forms[0].submit();\r\n")
     .append("}\r\n")
     .append("function page_next()\r\n")
     .append("{\r\n")
     .append(" var pageNo = document.forms[0].elements[\"pageResult.pageNo\"].value;\r\n")
     .append(" document.forms[0].elements[\"pageResult.pageNo\"].value = parseInt(pageNo) + 1;\r\n")
     .append(" page_validate();\r\n")
     .append(" document.forms[0].submit();\r\n")
     .append("}\r\n")
     .append("function page_last()\r\n")
     .append("{\r\n")
     .append(" document.forms[0].elements[\"pageResult.pageNo\"].value = pageTotal;\r\n")
     .append(" document.forms[0].submit();\r\n")
     .append("}\r\n")
     .append("function page_validate()\r\n")
     .append("{\r\n")
     .append(" var pageNo = document.forms[0].elements[\"pageResult.pageNo\"].value;\r\n")
     .append(" if (pageNo<1)pageNo=1;\r\n")
     .append(" if (pageNo>pageTotal)pageNo=pageTotal;\r\n")
     .append(" document.forms[0].elements[\"pageResult.pageNo\"].value = pageNo;\r\n")      
     .append(" var pageSize = document.forms[0].elements[\"pageResult.pageSize\"].value;\r\n")
     .append(" if (pageSize<1)pageSize=1;\r\n")
     .append(" document.forms[0].elements[\"pageResult.pageSize\"].value = pageSize;\r\n")
     .append("}\r\n")
     .append("function order_by(field){\r\n")
     .append(" document.forms[0].elements[\"pageResult.orderBy\"].value = field;\r\n")
     .append(" page_first();\r\n")
     .append("}\r\n");
     sb.append("</script>\r\n");
     JspWriter out = pageContext.getOut();
     out.println(sb.toString());
    }
   }
  } catch (Exception e) {
  }
  return EVAL_PAGE;
 }
public class PageResult<E> {
 private String orderBy = "";
 private String sort = "asc";
 private List<E> list = new ArrayList<E>(); //查询结果
 private int pageNo = 1; //实际页号
 private int pageSize = 15; //每页记录数
 private int recTotal = 0; //总记录数
 
 public List getList() {
  return list;
 }
 public void setList(List<E> list) {
  this.list = list;
 }
 public int getPageNo() {
  return pageNo;
 }
 public void setPageNo(int pageNo) {
  this.pageNo = pageNo;
 }
 public int getPageSize() {
  return (0==pageSize)?10:pageSize;
 }
 public void setPageSize(int pageSize) {
  this.pageSize = pageSize;
 }
 public int getRecTotal() {
  return recTotal;
 }
 public void setRecTotal(int recTotal) {
  this.recTotal = recTotal;
 }
 public int getPageTotal() {
  int ret = (this.getRecTotal() - 1) / this.getPageSize() + 1;
  ret = (ret<1)?1:ret;
  return ret;
 }
 public int getFirstRec()
 {
  int ret = (this.getPageNo()-1) * this.getPageSize();// + 1;
  ret = (ret < 1)?0:ret;
  return ret;
 }
 public String getOrderBy() {
  return orderBy;
 }
 public void setOrderBy(String orderBy) {
  this.orderBy = orderBy;
 }
 public String getSort() {
  return sort;
 }
 public void setSort(String sort) {
  this.sort = sort;
 }