昨天下午花了一些时间封装了分页的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就可以使用啦!