java分页

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

效果图


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值