日期:2014-05-16  浏览次数:20427 次

jsp分页【原创】

这段时间的收获就是终于完成了分页。分页是在大二的时候听老师说过的,一直想做,想不到知道大四实习期才做出,环境真是很重要,如果不是老大要求,我一辈子也没有主动去写的哈哈哈。其实也不难的。

我的做法很简单的,分页就是:

得到一些要显示的数据,封装好,可以装在list这些容器里,然后写个分页算法,算法的目的是根据需要计算出显示list里面的数据的开始位置和结束位置,也就是所谓的一页有多少条记录,也就是记录段,而把记录段foreach出来,就是分页了。每当点击“下一页”或“上一页”时,机会刷新页面重新计算list的开始位置和结束位置以便输出新的数据(也就是新的一页了),这时候要注意上下文关系,一定要保存好上一次的位置,这点毋庸置疑的。以上就是这个思想。下面给出算法和一些代码判断以作记录。p.s.:代码是给我自己看的,所以不做注释。

String action = request.getParameter("action"); //动作,首页,下页,前页,最后页
if (action == null)
?? action = "first";

String spage1 = request.getParameter("page"); //当前页数
spage1 = spage1 == null ? "1" : spage1;
int spage = new Integer(spage1).intValue();

String pagesize1 = request.getParameter("pagesize"); //每页有几条记录
pagesize1 = pagesize1 == null ? "3" : pagesize1;
int pagesize = new Integer(pagesize1).intValue();

//计算开始显示的行数
String st = (String) request.getAttribute("listsize");
System.out.println("st::" + st);
int totalrec = Integer.parseInt(st);
System.out.println("totalrec::" + totalrec);
Integer i_BeginRow = new Integer(0);
Integer i_EndRow = new Integer(0);
int i_Left = totalrec % pagesize; //剩余记录条数,除每页的页数后的余数
int totalpage = 0; //总页数
if (i_Left == 0)
?? totalpage = totalrec / pagesize;
else
?? totalpage = totalrec / pagesize + 1;

if ("first".equals(action)) { //第一页
?? i_BeginRow = new Integer(0);
?? if (totalpage == 1)
??? i_EndRow = new Integer(totalrec - 1);
?? else {
??? if (pagesize >= totalrec)
???? i_EndRow = new Integer(totalrec - 1);
??? else
???? i_EndRow = new Integer(pagesize - 1);
?? }
}
if ("last".equals(action)) { //最后页
?? i_BeginRow = new Integer((totalpage - 1) * pagesize);
?? i_EndRow = new Integer(totalrec - 1);
}
if ("previous".equals(action)) { //前一页
?? i_BeginRow = new Integer((spage - 1) * pagesize);
?? i_EndRow = new Integer(spage * pagesize - 1);
}
if ("next".equals(action)) { //后一页
?? i_BeginRow = new Integer((spage - 1) * pagesize);
?? if (spage * pagesize >= totalrec)
??? i_EndRow = new Integer(totalrec - 1);
?? else
??? i_EndRow = new Integer(spage * pagesize - 1);
}

System.out.println("i_BeginRow::" + i_BeginRow);
System.out.println("i_EndRow::" + i_EndRow);

request.setAttribute("begin",i_BeginRow);
request.setAttribute("end",i_EndRow);

?

function next(){
form1.action = "/present.info?pagePostion=backdoor&page=<%=spage + 1%>&action=next";
form1.submit();
}
function prev(){
form1.action = "/present.info?pagePostion=backdoor&page=<%=spage - 1%>&action=previous";
form1.submit();
}
function first(){
form1.action = "/present.info?pagePostion=backdoor&page=<%=1%>&action=first";
form1.submit();
}
function last(){
form1.action = "/present.info?pagePostion=backdoor&page=<%=totalpage%>&action=last";
form1.submit();
}


function check(){
form1.action = "/present.info?pagePostion=backdoor";
form1.submit();
}

?

?

<c:forEach var="present" items="${presents}" varStatus="var" begin="${begin}" end="${end}" step="1">
???

?

<%if (spage>1){%>
????????????? <a href="javascript:first()">
????????????? <%}%>
????????????? 首页
????????????? <%if (spage>1){%>
????????????? </a>
????????????? <%}%>
?????????????  | 
????????????? <%if (spage>1){%>
????????????? <a href="javascript:prev()">
????????????? <%}%>
????????????? 上一页
????????????? <%if (spage>1){%>
????????????? </a>
????????????? <%}%>