分页是我在整个项目里花费时间最长的,也是最费脑筋的。最开始的分页就是使用链接,没有带条件,数据也不多,开始就将就着了。但是后来由于系统不断的完善,以及数据量的增大,我发现这个分页根本无法满足需求,而自己能力又不够,没法写像公司那样的分页,以至于后来大段时间都在寻找一个方法去解决它。

用的mysql数据库,分页自然使用limit,开始参考的书上limit ?,n ,居然是从1开始的,我说怎么数据都不对呢,在页面上显示第一页的时候实际的值要从0开始才对;带入的参数一个是页码,一个是查询条件,将limit放在最后,中间加条件,代码只是主要部分。而jsp页面中则是大量的分页判断,我自己都看不下去,特别的繁琐,而且每个里面都有,主要是自己不会使用那种可以直接调用的。

======Servlet===========

     ····   int page = 0;

if (page1 != null) {  page = Integer.parseInt(page1);  }

try{   ····

  List<BookListInfo> list = bookdao.showByPage(page,bookdao.getSqlCondition(book)) ;

============================================


=======Dao中函数===========分页功能,对应书籍列表,显示所有==========================//

public List<BookListInfo> showByPage(int page,String condition ) {

······(省略)

String sql = "select * from book_list_info where 1=1 "+ condition +"  order by id desc limit ?,5";

pstmt = con.prepareStatement(sql);

            if(page==0){  pstmt.setInt(1, page);  }

            else{   pstmt.setInt(1, page*5); }

····

============================================

jsp界面中使用的表单形式分页,主要是因为链接无法带中文参数去到下一页,我也试过js的假分页,但是不知道是什么原因就是加不进去,导致我后来苦苦探索得出的这个表单。其实表单形式的分页我早就想到过,但是由于表单每一个按钮它就换了一行,导致界面惨不忍睹,后来还是在别人的提醒下做了一个表格,将他们抓进来。查询条件使用隐藏的text传递,这里要注意的是里面的name属性不要和界面上别的名称一样。首页、上一页这种条件好判断,主要是我在中间加上了页码,一旦数据很多,页数增大,后果不堪设想,于是又开始探索如何只显示规定的页数。开始对maxpage进行长时间的判断,实验,得出了这个一大堆的代码,真是辛苦的要命。

<table align="center"> 

<tr>

<td>共${count}条记录&nbsp;</td>

<td>共${maxpage}页&nbsp;</td>

<td>当前第${page+1}页&nbsp;</td>

<c:if test="${page == 0}">

<td><input type="button" name="sy" value="首页"  class="fybu" title="已是第一页"/></td>

</c:if>

<c:if test="${page > 0}">

<td>

<form action="/Guolin_Book_Shop/BookPageServlet?code=2&page=0"  method="post">

<input type="hidden" name="book_name" value="${book_name}"/>

<input type="hidden" name="book_id" value="${book_id}"/>

<input type="submit" name="sy" value="首页"  class="fybu"/>

</form>

</td>

</c:if>

<c:if test="${page == 0 }"><td><input type="button" name="syy" value="上一页"  class="fybu" title="已是第一页"/></td></c:if>

<c:if test="${page > 0 }">

<td>

<form action="/Guolin_Book_Shop/BookPageServlet?code=2&page=${page-1}"  method="post">

<input type="hidden" name="book_name" value="${book_name}"/>

<input type="hidden" name="book_id" value="${book_id}"/>

<input type="submit" name="syy" value="上一页"  class="fybu"/>

</form>

</td>

</c:if>

<c:if test="${maxpage<8}">

<c:forEach var="i" begin="1" end="${maxpage}" step="1">

<td>

<form action="/Guolin_Book_Shop/BookPageServlet?code=2&page=${i-1}"  method="post">

<input type="hidden" name="book_name" value="${book_name}"/>

<input type="hidden" name="book_id" value="${book_id}"/>

<input type="submit" name="${i}" value="${i}"  class="fybu"/>

</form>

</td>

</c:forEach>

</c:if>

<c:if test="${maxpage>=8}">

<c:if test="${maxpage-page<=8}">

<c:forEach var="i" begin="${maxpage-7}" end="${maxpage}" step="1">

<td>

<form action="/Guolin_Book_Shop/BookPageServlet?code=2&page=${i-1}"  method="post">

<input type="hidden" name="book_name" value="${book_name}"/>

<input type="hidden" name="book_id" value="${book_id}"/>

<input type="submit" name="${i}" value="${i}"  class="fybu"/>

</form>

</td>

</c:forEach>

</c:if>

<c:if test="${maxpage-page>8}">

<c:forEach var="i" begin="${page+1}" end="${page + 8}" step="1">

<td>

<form action="/Guolin_Book_Shop/BookPageServlet?code=2&page=${i-1}"  method="post">

<input type="hidden" name="book_name" value="${book_name}"/>

<input type="hidden" name="book_id" value="${book_id}"/>

<input type="submit" name="${i}" value="${i}"  class="fybu"/>

</form>

</td>

</c:forEach>

</c:if>

<c:if test="${maxpage-page<8}">

<c:forEach var="i" begin="${maxpage-7}" end="${maxpage}" step="1">

<td>

<form action="/Guolin_Book_Shop/BookPageServlet?code=2&page=${i-1}"  method="post">

<input type="hidden" name="book_name" value="${book_name}"/>

<input type="hidden" name="book_id" value="${book_id}"/>

<input type="submit" name="${i}" value="${i}"  class="fybu"/>

</form>

</td>

</c:forEach>

</c:if>

</c:if>

<c:if test="${page == maxpage-1 }"><td><input type="button" name="xyy" value="下一页"  class="fybu" title="已是最后一页"/></td></c:if>

<c:if test="${page < maxpage-1 }">

<td>

<form action="/Guolin_Book_Shop/BookPageServlet?code=2&page=${page+1}"  method="post">

<input type="hidden" name="book_name" value="${book_name}"/>

<input type="hidden" name="book_id" value="${book_id}"/>

<input type="submit" name="xyy" value="下一页"  class="fybu"/>

</form>

</td>

</c:if>

<c:if test="${page == maxpage-1 }"><td><input type="button" name="my" value="末页"  class="fybu" title="已是最后一页"/></td></c:if>

<c:if test="${page < maxpage-1 }">

<td>

<form action="/Guolin_Book_Shop/BookPageServlet?code=2&page=${maxpage-1}"  method="post">

<input type="hidden" name="book_name" value="${book_name}"/>

<input type="hidden" name="book_id" value="${book_id}"/>

<input type="submit" name="my" value="末页" class="fybu"/>

</form>

</td>

</c:if>

<td width="100">&nbsp;</td>

<td width="100">&nbsp;</td>

</tr>

</table>

至此算是把分页解决了吧。