紧接着上篇—分页技术原理与实现(二)——Java+Oracle实现,本篇继续分析分页技术。上篇讲的是分页技术的代码实现,这篇继续分析一下分页技术的效果控制。
上篇已经用代码简单的实现了一个分页。但是我们都看到,代码中每次通过servlet请求取得结果集后,都会转向到一个jsp页面显示结果,这样每次查询页面都会刷新一下,比如查询出现结果集后要查看第三页,页面就会刷新一下。这样页面给人的效果感觉就会有点不舒服,所以我们希望能够在通过条件查询结果集后无论访问哪一页,页面都不会刷新,而只是结果集变化。要解决这个,我想大家很容易就会想到Ajax了。
是啊,这就要请Ajax出山了。当通过查询条件查询到结果集后,以后每次访问任何一页都通过Ajax来访问,使用异步Ajax与Servlet进行交互,将结果查询出来返回给Ajax,这样页面内容因为Ajax返回结果而改变,而页面却不会刷新,这就实现了无刷新的分页技术。
- <!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Strict//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
- <htmlxmlns="http://www.w3.org/1999/xhtml"xml:lang="en">
- head>
- Metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/>
- linkrel="stylesheet"href="../lib/jquery_pagination/pagination.css"mce_href="lib/jquery_pagination/pagination.css"/>
- mce:scripttype="text/javascript"src="../lib/jquery/jquery.min.js"mce_src="lib/jquery/jquery.min.js"></mce:scriptmce:scripttype="text/javascript"
- src="../lib/jquery_pagination/jquery.pagination.js"mce:scripttype="text/javascript"><!--
- /**
- *Callbackfunctionthatdisplaysthecontent.
- *
- *Getscalledeverytimetheuserclicksonapaginationlink.
- *
- *@param{int}page_indexNewPageindex
- *@param{jQuery}jqthecontainerwiththepaginationlinksasajQueryobject
- */
- functionpageselectCallback(page_index,jq){
- varnew_content=$('#hiddenresultdiv.result:eq('+page_index+')')
- .clone();
- $('#Searchresult').empty().append(new_content);
- returnfalse;
- }
- functioninitPagination(){
- varnum_entries=$('#hiddenresultdiv.result').length;
- //Createpaginationelement
- $("#Pagination").pagination(num_entries,{
- num_edge_entries:2,
- num_display_entries:8,
- callback:pageselectCallback,
- items_per_page:1
- });
- }
- //WhentheHTMLhasloaded,callinitPaginationtopaginatetheelements
- $(document).ready(function(){
- initPagination();
- });
- //-->
- mce:styletype="text/css"><!--
- *{
- padding:0;
- margin:0;
- }
- body{
- background-color:#fff;
- margin:20px;
- padding:0;
- height:100%;
- font-family:Arial,Helvetica,sans-serif;
- }
- #Searchresult{
- margin-top:15px;
- margin-bottom:15px;
- border:solid1px#eef;
- padding:5px;
- background:#eef;
- width:40%;
- }
- #Searchresultp{
- margin-bottom:1.4em;
- }
- --mce:stylestyletype="text/css"mce_bogus="1">*{
- padding:0;
- margin:0;
- }
- body{
- background-color:#fff;
- margin:20px;
- padding:0;
- height:100%;
- font-family:Arial,sans-serif;
- }
- #Searchresult{
- margin-top:15px;
- margin-bottom:15px;
- border:solid1px#eef;
- padding:5px;
- background:#eef;
- width:40%;
- }
- #Searchresultp{
- margin-bottom:1.4em;
- }styletitle>Paginationbodyh4>
- jQueryPaginationPluginDemo
- >
- divid="Pagination"class="pagination"divbrstyle="clear:both;"mce_style="clear:both;"divid="Searchresult">
- Thiscontentwillbereplacedwhenpaginationinits.
- >
- divid="hiddenresult"style="display:none;"mce_style="display:none;"divclass="result"p>
- Globallymaximizegranular"outsidetheBox"thinkingvis-a-vis
- qualityniches.Proactivelyformulate24/7resultswhereas2.0
- catalystsforchange.Professionallyimplement24/365nichesrather
- thanclient-focusedusers.
- >
- Competentlyengineerhigh-payoff"outsidetheBox"thinkingthrough
- crossfunctionalbenefits.Proactivelytransitionintermandated
- processesthroughopen-sourceniches.Progressivelyengage
- maintainableinnovationandextensibleinterfaces.
- >
- Crediblyfabricatee-businessmodelsforend-to-endniches.
- Compellinglydisseminateintegratede-marketswithoutubiquitous
- services.Crediblycreateequityinvestedchannelswith
- multidisciplinaryhumancapital.
- >
- Interactivelyintegratecompetitiveusersratherthanfullytested
- infomediaries.Seamlesslyinitiatepremiumfunctionalitiesrather
- thanimpactfularchitectures.Rapidiouslyleverageexisting
- resource-levelingprocessesviauser-centricportals.
- >
- Monotonectallyinitiateuniquee-servicesvis-a-visclient-centric
- deliverables.QuicklyimpactparallelopportunitieswithB2B
- bandwidth.Synergisticallystreamlineclient-focused
- infrastructuresratherthanB2Ce-commerce.
- >
- Phosfluorescentlyfabricate24/365e-businessthrough24/365total
- linkage.Completelyfacilitatehigh-qualitysystemswithout
- stand-alonestrategicthemeareas.
- html>
这就是一个非常简单的无刷新分页实现,使用了JQuery+ jquery.pagination框架。现在随着框架的流行,尤其是Jquery的流行,使用框架来开发是非常有效的。上面代码原理在代码中已有注释,也可参考Jquery的官方网站:。
现在就可以来开发我们的Ajax无刷新分页实现。基于上面的原理,在响应页码被按下的代码中pageselectCallback(),我们使用一个Ajax异步访问数据库,通过点击的页号将结果集取出后再用异步设置到页面,这样就可以完成了无刷新实现。
页码被按下的响应函数pageselectCallback()修改如下:
这样就可以用异步方式获取结果,用showResponse函数来处理结果了,showResponse函数如下:
如上代码就是用来处理通过Ajax异步请求Servlet后返回的XML格式的结果,其中Servlet代码在上篇中。其中itemList、pageList分别是解析返回后生成的用户List和分页导航,这样用户就可以以自己的展现方式展现数据了。