`
jackie9305
  • 浏览: 38256 次
  • 性别: Icon_minigender_1
  • 来自: 福建
社区版块
存档分类
最新评论

自己封装的一个Strut2+Hibernate+Spring框架的分页功能

    博客分类:
  • SSH
阅读更多

   昨天下午花了一些时间封装了分页的java类,方便自己日后使用,同时有需要分页的朋友们也可以参考,希望对大家能有所帮助。下面是一个Page类的代码。

 

public class Page {
 private int allSize;// 返回的记录数量
 private int page;// 当前页
 private int pageCount;// 页数
 private int startRow;// 从哪条记录开始算
 private static final int pageSize = 3;// 每页显示的记录数

 public Page() {
 }

 // 自定义Page方法传入当前页和总页数
 public Page(int page, int pagecount) {
  this.page = page;
  this.pageCount = pagecount;
 }

 public void setPageValue() {
  if (page == 1) {
   startRow = 0;// 当首页时,记录数从0开始
   // 计算页面数量
   pageCount = (allSize % pageSize == 0) ? (allSize / pageSize) : (allSize / pageSize + 1);
  } else if (page == pageCount) {
   // 当尾页时
   startRow = (pageCount - 1) * pageSize;
  } else {
   startRow = (page - 1) * pageSize;
  }
  // 当没有数据时,显示到第一页
  if (pageCount == 0) {
   pageCount = 1;
  }
 }

 // 获取每页的记录数
 public static int getPageSize() {
  return pageSize;
 }

 // 获取总的页数
 public int getPageCount() {
  return pageCount;
 }

 public int getStartRow() {
  return startRow;
 }

 public void setAllSize(int allSize) {
  this.allSize = allSize;
 }
}

接下来是一个pageUtil类,用于从struts的action中传递参数。

package com.tjn.pageUtil;
public class PageUtil {
/**
 *
 * @param actionPageNow Action中传过来的当前页的值
 * @param actionPageCount Action中传过来的当前页的值
 * @param maxSize 总数量
 * @return Page
 * @author Jackie
 * @date:2008/12/31
 */
 public static Page splitPage(int actionPageNow,int actionPageCount, Integer maxSize) {
  Page page = new Page(actionPageNow, actionPageCount);
  if (actionPageNow == 1) {
   page.setAllSize(maxSize);
  }
  page.setPageValue();//计算
  return page;//返回page对象
 }
}

将这两个类放置到项目中的公共包中,接下来是在你的daoBase的实现类中实现以下两个方法。

/**
 * @method getSize
 * @desc:获取总数
 * @param str
 * 传递进来的是po中的实体类的字符串名称
 *
 */
 public int getSize(String str) {
  // TODO Auto-generated method stub
  String sql="select count(b.id) from "+str+" b";
  return Integer.parseInt(getHibernateTemplate().find(sql).get(0).toString());
 }
 /**
  *params:
  * startRow 起始行数
  * pageSize 每页显示的记录数
  */

 public List<?> queryPageList(Class<?> obj,int startRow, int pageSize) {
  List<?> list= this.getHibernateTemplate().findByCriteria(DetachedCriteria.
    forClass(obj).addOrder(Order.asc("id")),startRow,pageSize);
  return list;
 }
然后在Struts你的业务类的action中设置三个属性,并生成get set 方法。

public int pageNow=1; //初始化为1,默认从第一页开始显示
    public int pageCount;//总页数
 private ProductDao productDao;

要在action的业务类中实现分页,例如我的查询结果中调用以下代码。

public String queryAllProductService() {
  Integer maxSize=this.getProductDao().getSize("Products");
  Page page = PageUtil.splitPage(pageNow,pageCount, maxSize);
  //日志输出
  products = this.getProductDao().queryPageList(Products.class,page.getStartRow(),page.getPageSize());
  pageCount=page.getPageCount();//总页数
  return SUCCESS;
 }

 

在struts2中我的strut.xml配置文件如下:

<action name="ProductList" class="productMgrAction"
   method="queryAllProductService">
   <result>/Backview/product_modi_list.jsp</result>
  </action>

spring中的配置如下

 <bean id="productDao" class="com.tjn.dao.ProductDaoImpl" parent="daoBase">
 </bean>
 <bean id="productMgrAction" class="com.tjn.action.ProductMgrAction" scope="prototype">
 <property name="productDao">
 <ref local="productDao"/>
 </property>
 </bean>

接下来是一个自己编写的page.jsp页面的内容

<%@ page language="java" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
  <style type="text/css">
A:link {
 COLOR: #006699;
 TEXT-DECORATION: none
}

A:hover { /*鼠标移上去时字体变粗*/
 COLOR: red;
 font-weight: bold
}

A:visited {
 COLOR: #006699;
 TEXT-DECORATION: none
}

A:active {
 COLOR: #006699;
 TEXT-DECORATION: none
}

td {
 FONT-SIZE: 12px;
 COLOR: #006699;
 font-family: "宋体", "����";
}

.buttoncss {
 font-family: "Tahoma", "����";
 font-size: 9pt;
 color: #003399;
 border: 1px #003399 solid;
 color: 006699;
 BORDER-BOTTOM: #93bee2 1px solid;
 BORDER-LEFT: #93bee2 1px solid;
 BORDER-RIGHT: #93bee2 1px solid;
 BORDER-TOP: #93bee2 1px solid;
 background-color: #e8f4ff;
 CURSOR: hand;
 font-style: normal;
}

.inputcss {
 font-size: 9pt;
 color: #003399;
 font-family: "宋体";
 font-style: normal;
 border-color: #93BEE2 #93BEE2 #93BEE2 #93BEE2;
 border: 1px #93BEE2 solid;
}
</style>
</head>
 <body>
  <s:hidden id="pageCount" name="pageCount"></s:hidden>
  <s:hidden id="pageNowText" name="pageNow"></s:hidden>
  <table  width="100%">
   <tr>
    <td align="center">
     <s:a href="javascript:HomePage()">首页</s:a>
     <s:a href="javascript:PrePage()">上一页</s:a>
     <s:a href="javascript:NextPage()">下一页</s:a>
     <s:a href="javascript:LastPage()">尾页</s:a>
     共
     <font color="red"><s:property value="pageCount" />
     </font>页,当前第
     <font color="red"><s:property value="pageNow" />
     </font>页 转到第
     <input id="inputPage" type="text"
      value='<s:property value="pageNow"/>' size="1" class="inputcss" />
     页
     <span> <input type="button" value="G O"
       onclick="buttonCommit()" class="buttoncss" /> </span>

    </td>
   </tr>
  </table>
  <script language="javascript">
  var page=document.getElementById('pageNowText').value;
  var pageCount=document.getElementById('pageCount').value;
  //首页
  function HomePage(){
   window.location="?pageNow=1";
  }
  //尾页
    function LastPage(){
   window.location="?pageNow="+pageCount+"&pageCount="+pageCount;
  }
  //上一页
    function PrePage(){
        page = page - 1;      
        if(page == 0)     page = 1;
        window.location ="?pageNow="+page+"&pageCount="+pageCount;
    }
    //下一页
    function NextPage(){
      page =parseInt(page)+1; 
      if(page > pageCount) page =pageCount;
       window.location ="?pageNow="+page+"&pageCount="+pageCount;
    }
    //转到第几页
    function buttonCommit(){
     var inputPage=document.getElementById('inputPage').value;
     inputPage=parseInt(inputPage);
     if(inputPage > pageCount){
     inputPage =pageCount;
     }
       window.location ="?pageNow="+inputPage+"&pageCount="+pageCount;
    }
</script>
  </body>
  </html>

在需要分页的jsp页面中,只需要在想放置分页的位置用jsp:include导入page.jsp就可以使用啦!

 

6
1
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics