先给出后台代码
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>
效果图