数据分页

数据分页是软件开发中一项重要的工作,一般包括两类处理方法:

1.后台完成数据分页的分页功能,也就是在获得显示数据的时候就进行分页处理,只获得页面所要显示的数据内容

适用于大型系统,可以避免一次性从数据库中读取大量数据所带来的资源消耗

2.在后台获得所有的数据,而在前台显示的时候有选择的输出所要显示的内容

适用于数据量较小的情况,特别适用于那些对只读数据的显示

 

数据分页跟用户关系最为密切的就是我们常看到的,First Previous 1 2 Next Last.

这两天正好要实现这个,所以研究了下面两种方法:

1.前端显示和后端的数据读取完全自己写

在struts的web开发中,数据获取只要action对象得到数据记录条,而最关键就在于前台的显示页面,因为逻辑和控制数据输出都在这个页面显示的。这里关键要用到几个标记,我就不分开说明了,看代码吧

 

<div align="center">
 <h3>Paging</h3>
 <c:set var="listSize" value="${fn:length(presidents)}"/>
 <c:set var="pageSize" value="10"/>
 <c:set var="pageBegin" value="${param.pageBegin}"/> 
 <c:set var="pageEnd" value="${pageBegin + pageSize - 1}"/>
 <c:if test="${(pageBegin - pageSize) ge 0}">
  <a href='<c:url value="/page.do">
             <c:param name="pageBegin" value="${pageBegin - pageSize}"/>
           </c:url>'>
    Prev
  </a>
 </c:if>
 &nbsp;
 <c:if test="${(listSize gt pageSize) and (pageEnd lt listSize)}">
  <a href='<c:url value="/page.do">
             <c:param name="pageBegin" value="${pageBegin + pageSize}"/>
           </c:url>'>
    Next
  </a>
 </c:if>
 <table border="2">
  <tr>
     <th>First Name</th>
     <th>Last Name</th>
     <th>Term of Office</th>
  </tr>
  <c:forEach var="pres" items="${presidents}"
           begin="${pageBegin}" end="${pageEnd}">
  <tr>
   <td><c:out value="${pres.firstName}"/></td>
   <td><c:out value="${pres.lastName}"/></td>
   <td><c:out value="${pres.term}"/></td>
  </tr>
  </c:forEach>
 </table>
</div>

 

在页面中要注意包含

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>

另外注意在web.xml中配置jsp taglib

<jsp-config>

   <taglib>

    <taglib-uri>http://java.sun.com/jsp/jstl/core</taglib-uri>

    <taglib-location>/WEB-INF/c.tld</taglib-location>

   </taglib>

   <taglib>

   <taglib>

    <taglib-uri>http://java.sun.com/jsp/jstl/functions</taglib-uri>

    <taglib-location>/WEB-INF/fn.tld</taglib-location>

   </taglib>
</jsp-config>

而对于第二个包,要注意lib里面standard.jar的版本,在低版本中是没有functions的,在测试中就遇到了此问题。

 

2.借助插件jquery.pagination.js,再加上一些处理函数可以让前后端过程非常易于控制和更改

页面上:

  <div id="Pagination" class="pagination">
  </div>

初始化页面时:

       var totalPages = 10;
    //pagination element settings
                $("#Pagination").pagination(totalPages, {
        first_text:"First",
        prev_text:"Previous",
              next_text:"Next",
     last_text:"Last",
              ellipse_text:" ",
     num_edge_entries: 2,
     num_display_entries: 1,
                    callback: pageselectCallback
                });

回调函数:

   function pageselectCallback(page_id, jq){

    //retrieve data process;

    //data display
          $('#Searchresult').text("Result "+((page_id*10)+1)+"-"+((page_id*10)+10));


            }

这样在每次点击页码之后就能得到page_id,jq. 之后在回调函数中,retrieve data 就可以根据返回的参数page_id去获取数据,如果是结合ajax,那么就可以实现页面的无刷新翻页

 

因为在这个项目中没有用到struts的MVC控制框架,所以我是用了第二种方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值