您的位置:首页 > 编程语言 > Java开发

java分页

2015-11-11 21:32 411 查看
先给出后台代码
package com.mcjj.util;

import java.lang.reflect.Method;
import java.util.List;

public class Page<T> extends GenericTypeUtil<T>{
private int currentPage = 0;	//当前页
private int totalPages = 1 ;	//总页数
private long totalRecords = 0;	//总记录数
private int pageSize = 5;	//每页显示的记录数

private List<T> pageResult;		//一个页面包含的所有结果

private Class<?> serviceCls;	//泛型类型所对应的 service类类型
private Object serviceObj;		//泛型类型所对应的service实例对象

public Page()
{
try{
String clsName = new EntityUtil<T>(super.getGenericType()).getEntityName();
String serviceClsName = "com.mcjj.service.impl." +
clsName.substring(clsName.lastIndexOf(".") + 1) + "Service";
this.serviceCls = Class.forName(serviceClsName);	//我们的目标是调用T类型的Service类中的方法
this.serviceObj = serviceCls.newInstance();

String[] args = null;
init(args);		//实例化:在我们创建一个页的时候应当初始化记录总数,总页数等内容。

}catch(Exception e)
{
e.printStackTrace();
}
}

public int getCurrentPage() {
return currentPage;
}
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
public int getTotalPages() {
return totalPages;
}
public long getTotalRecords() {
return totalRecords;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize, String... args) {
this.pageSize = pageSize;
init(args);	//当改变了pageSize之后,totalPage等也会随之改变,必须重新初始化
}
public List<T> getPageResult()
{
return this.pageResult;
}

//获取一个页面的内容。
//通过反射,调用泛型类的services类中对应的方法,获取相应的记录
@SuppressWarnings("unchecked")
public List<T> getOnePage(String... args)
{
init(args);
try {
Method method = null;
if(args == null)
{
method = this.serviceCls.getMethod("getRecords", new Class[]{int.class, int.class});
this.pageResult = (List<T>)method.invoke(serviceObj, (currentPage - 1) * pageSize, pageSize);
}
else
{
method = this.serviceCls.getMethod("getRecords", new Class[]{String.class, String.class, int.class, int.class});
this.pageResult = (List<T>)method.invoke(serviceObj, args[0], args[1], (currentPage - 1) * pageSize, pageSize);
}
}
catch (Exception e)
{
e.printStackTrace();
}
return this.pageResult;
}

//初始化totalRecords 和 totalPages
private void init(String... args) {
try {
Method method = null;
if(args == null)
{
method = serviceCls.getMethod("getCountOfRecords");
this.totalRecords = (Long) method.invoke(serviceObj);
}
else
{
method = serviceCls.getMethod("getCountOfRecords", new Class[]{String.class, String.class});
this.totalRecords = (Long) method.invoke(serviceObj, args[0], args[1]);	//获得总记录数。
}

this.totalPages = (int) (this.totalRecords / this.pageSize);
if(totalRecords % pageSize != 0 || totalRecords == 0)	//记录数不整除或者为0 的时候需要加1
{
++ totalPages;
}
} catch (Exception e){
e.printStackTrace();
}
}

}


前台代码:

<table align="center" cellpadding="0" cellspacing="0" class="page_btn">
<tr>
<td>
<s:if test="#request.page.currentPage == 1">
<a href="javascript:void(0)">上一页</a>
</s:if>
<s:else>
<a href='<s:url action="TeachersAction" >
<s:param name="operateType" value="0"></s:param>
<s:param name="checkType" value="#request.checkType" ></s:param>
<s:param name="currentPage" value="#request.page.currentPage"></s:param>
</s:url>'>上一页</a>
</s:else>
</td>

<s:bean name="org.apache.struts2.util.Counter" id="counter">
<s:param name="first" value="0" />
<s:param name="last" value="#request.page.totalPages - 1" />

<s:iterator>
<td>
<s:if test="#counter.current == #request.page.currentPage">
<a href="javascript:void(0)" style="background:#01c7d7; color:#fff;" >
<s:property value="#counter.current"/>
</a>
</s:if>
<s:else>
<a href='<s:url action ="TeachersAction" >
<s:param name="checkType" value="#request.checkType"></s:param>
<s:param name="currentPage" value="#counter.current"></s:param>
</s:url>'	>
<s:property value="#counter.current"/>
</a>
</s:else>
</td>
</s:iterator>

</s:bean>

<td>
<s:if test="#request.page.currentPage >= #request.page.totalPages">
<a href="javascript:void(0)">下一页</a>
</s:if>
<s:else>
<a href='<s:url action ="TeachersAction">
<s:param name="operateType" value="1"></s:param>
<s:param name="checkType" value="#request.checkType"></s:param>
<s:param name="currentPage" value="#request.page.currentPage"></s:param>
</s:url>'>下一页</a>
</s:else>
</td>
</tr>
</table>


效果图

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: