分页常用公式:
如果:页数=“数据库记录条数”除以“每页显示条数”==0
那么页数等于“数据库记录条数”除以“每页显示条数”
如果:页数=“数据库记录条数”除以“每页显示条数”余数>0
那么页数等于“数据库记录条数”除以“每页显示条数”+1
第N显示第几条记录(记录从零开始算:)?因为返回一个集合,集合是从零开始算的。(例如:一个显示
五条数据:那么第一页就是0到4,第二页5到9,第三页显示的是10到14,后面可以以此类推);
规律就是:(N-1)*每页显示页数=< 序号 < N*每页显示页数;
分页的本质:传入一个比较大的集合,返回需要显示页上的记录
分页常用的变量:定义变量的时候,一定要根据自己的需要去定义,可能一下想不全,没关系你可以自己编码需求去慢慢添加.
第一就是集合容器,一般用List;
根据自己的需要第一变量:
private ArrayList biglist;//定义容器存放查询返回的所有记录:
private int curentPageIndex =1; //当前页,外界可以传进来,默认是1
//根据上面公式需要的条件,定义必须的变量
private int perPageIndex ; //上一页等于当前页减去一
private int nextPageIndex; //下一页等于当前页加上一
private int countPerpage =5; //每页显示记录条数,我们这里定义是5条;
private int pagecount //总页数,求出总页数,可以给尾页传递参数:可以根据上面的公式计算,总记录数除以每页显示记录
private int allcount //总记录条数 可以在查询总记录时求出,我的算法是,因为要返回一个集合,我们求集合的长度就可以
biglist.size();的方法:
private ArrayList smallList//小容器,返回当页的记录。
private Boolean firstPage //是否是首页
private Boolean lastPage //是否是尾页
定义之后你可以生成get和set方法:
在action里面接收页面传递的参数时候:我们定义的是int,我们用request.getParameter();返回值是string,
我们要把接收的参数转换为int,这点要注意,例如:int curentPageIndex = Integer.ParseInt(request接收的字符串);
就是用他的封装类转换.一定要判断是否为空,第一方法当前页是空的的,不然会报空指向异常:
首页和尾页先判断。首页永远 /query.do?pageIndex =1;struts1.2只执行.do结尾的访问。struts2.0是.action
那么尾页怎么算呢?就是等于页面的总页数。就是最后一页。
尾页等于 pagecount
计算总页数的时候,就用if判断么,因为这里分两个情况,总记录条数你可以算出来,countPerpage是自己定义的写死的,这里等于5
if(allcount%countPerpage){
pagecount =allcount/countPerpage;//总页数
}else{
pagecount =allcount/countPerpage +1; ;//总页数
}
做上一页的时候,当你在首页时候就不能再点击上一页了,在尾页的时候就在点击下一页了,这点要注意
要解决这个问题我们就要做判断了,那么我们怎么知道他是上一页和下一页呢?
我们可以在定义两个Boolean型的两个变量,一个是firstpage ,是否是首页:一个是lastpage,是否是尾页。
if(curentPageIndex==1){
firstpage = true;
}else{
firstpage = false;
}
if(curentPageIndex= pagecount){
lastpage = true;
}else{
lastpage =false;
}
那么在前台页面就可以判断,如果firstpage和lastpage =false 的时候就显示上一页和下一页的连接
你可以想如果等于true的话,就说明当前的页面可能就是首页和尾页了,这里的逻辑问题一定要搞清楚....
在页面判断的时候:struts 1.2 常用logic:(logic:iterate logic:equal 这里说的是常用的)标签,struts2.0 常用s:标签
2.0的就不举例了,判断的时侯 s:if,和1.2的logic:equal 一样: