最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

springMVC+velocity實(shí)現(xiàn)仿Datatables局部刷新分頁(yè)方法

 更新時(shí)間:2018年02月10日 10:14:21   作者:kusedexingfu  
下面小編就為大家分享一篇springMVC+velocity實(shí)現(xiàn)仿Datatables局部刷新分頁(yè)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

因?yàn)轫?xiàng)目中之前的模塊用的分頁(yè)插件是Datatables,很方便,但是新做的模塊表格中的布局有變化,Datatables插件滿足不了了。為了風(fēng)格的統(tǒng)一,同時(shí)也不希望查詢參數(shù)再傳遞回顯在頁(yè)面上,所以就采用局部刷新分頁(yè)的實(shí)現(xiàn)方案。

實(shí)現(xiàn)方案是這樣的,將表格部分提取出來(lái),用來(lái)作為頁(yè)面局部刷新的部分,文件名為list-data.vm

<table class="table text-center table_acolor"> 
 <thead> 
 <tr> 
  <th width="16%">userName</th> 
  <th width="24%">age</th> 
 </tr> 
 </thead> 
 <tbody> 
 #foreach($data in $!{page.list}) 
 <tr> 
  <td width="16%">$!{data.userName}</td> 
  <td width="24%">$!{data.sex}</td> 
 </tr> 
 #end 
 </tbody> 
</table> 
#pageNation($!{page}) 

其中的pageNation是定義的一個(gè)宏(macro),用來(lái)做底部的分頁(yè)條和分頁(yè)條的顯示邏輯。page對(duì)象是ajax請(qǐng)求返回的分頁(yè)數(shù)據(jù)。每一次ajax請(qǐng)求,查詢出分頁(yè)數(shù)據(jù),將數(shù)據(jù)放入list-data.vm所對(duì)應(yīng)的視圖的ModelAndView對(duì)象,然后返回ModelAndView對(duì)象,將這一部分追加到主頁(yè)面表格所在的部分。

macro部分如下:

#macro(pageNation $data) 
 #if(!$data.list.size() or $data.list.size() == 0) 
<div class="row DTTTFooter no-padding" style="height:40px; line-height:40px; text-align:center; font-size:14px;"> 
未查詢到記錄 
</div> 
 #end 
 #if($data.list.size() and $data.list.size() > 0) 
  <div id="activityTable_info" class="dataTables_info" role="status" aria-live="polite">顯示第 $!{data.startRow} 至 $!{data.endRow} 項(xiàng)結(jié)果,共 $!{data.total}項(xiàng)</div> 
  <div id="pagination" class="dataTables_paginate paging_full_numbers"> 
  #set($prevPage = ${data.prePage}) 
  #set($nextnPage = ${data.nextPage}) 
  <a #if($data.pageNum ==1) class="paginate_button disabled" disabled="disabled" href="javascript:void(0)" rel="external nofollow" rel="external nofollow" rel="external nofollow" 
  #else class="paginate_button" pageNum="1" href="javascript:goPage(1)" rel="external nofollow" 
  #end style="margin-left: 2px;" 
  >首頁(yè)</a> 
  <a #if($data.pageNum ==1) class="paginate_button disabled" disabled="disabled" href="javascript:void(0)" rel="external nofollow" rel="external nofollow" rel="external nofollow" 
  #else class="paginate_button" pageNum="$prevPage" href="javascript:goPage($prevPage)" rel="external nofollow" 
  #end style="margin-left: 2px;" 
  > 上頁(yè) </a> 
  #set($temp = ${data.pageNum} - 1) 
  #set($numbers = $!{pageUtil.numbers($temp, $data.pages)}) 
  
  #foreach($foo in $numbers) 
  #if($foo == -999) 
  <span>…</span> 
  #else 
  <a class="paginate_button #if($foo==${data.pageNum}) current #end" pageNum="$foo" #if($foo!=${data.pageNum}) href="javascript:goPage($foo)" rel="external nofollow" #end style="margin-left: 2px;" 
  > $foo </a> 
  #end 
  #end 
  
  <a 
  #if($data.pageNum == $data.pages) class="paginate_button disabled" disabled="disabled" 
  #else class="paginate_button" pageNum="$nextnPage" href="javascript:goPage($nextnPage)" rel="external nofollow" 
  #end style="margin-left: 2px;" 
  > 下頁(yè) 
  <a 
  #if($data.pageNum == $data.pages) 
   class="paginate_button disabled" disabled="disabled" href="javascript:void(0)" rel="external nofollow" rel="external nofollow" rel="external nofollow" 
  #else 
   class="paginate_button" pageNum="$data.pages" href="javascript:goPage($data.pages)" rel="external nofollow" 
  #end 
  >末頁(yè)</a> 
  到第 
 <input id="changePage" class="margin text-center" type="text" maxpage="10" style="height:28px;line-height:28px;width:40px;"> 
 頁(yè) 
 <a id="dataTable-btn" class="btn btn-default shiny" href="javascript:jumpPage($data.pages);" rel="external nofollow" style="margin-bottom:5px">確認(rèn)</a> 
 #end 
 </div> 
 <div p_sortinfo="$!{data.orderBy}" p_isFirst=$!{data.isFirst} p_isLast=$!{data.isLast} p_currentpagenum="$!{data.pageNum}" p_totalsize="$!{data.total}" p_endrow="$!{data.endRow}" p_totalpagesnum="$!{data.pages}" p_pagesize="$!{data.pageSize}" p_startrow="$!{data.startRow}" style="display:none" class="paginator"></div> 
#end 

pageUtil是寫的velocity toolbox的一個(gè)工具類,用來(lái)仿Datatables分頁(yè)條的分頁(yè)頁(yè)碼顯示的邏輯:

public class PageUtil { 
 
 public static LinkedList<Integer> range(Integer len,Integer start) { 
 LinkedList<Integer> out = new LinkedList<>(); 
 Integer end; 
 
 if (start == null ) { 
  start = 0; 
  end = len; 
 } 
  
 else { 
  end = start; 
  start = len; 
 } 
 
 for (int i=start ; i<end ; i++ ) { 
  out.add(i); 
 } 
 
 return out; 
 } 
 
 public static List<Integer> numbers (Integer page,Integer pages) { 
 LinkedList<Integer> numbers = new LinkedList<>(); 
 Integer buttons = 7; 
 Integer half = buttons / 2; 
 
 if (pages <= buttons ) { 
  numbers = range( 0, pages ); 
 } 
 else if ( page <= half ) { 
  numbers = range( 0, buttons-2 ); 
  numbers.add(-1000); 
  numbers.add( pages-1 ); 
 } 
 else if ( page >= pages - 1 - half ) { 
  numbers = range( pages-(buttons-2), pages ); 
  numbers.addFirst(-1000 ); //向頭放 
  numbers.addFirst(0 ); 
 } 
 else { 
  numbers = range( page-1, page+2 ); 
  numbers.add( -1000 ); 
  numbers.add( pages-1 ); 
  numbers.addFirst(-1000 ); 
  numbers.addFirst(0 ); 
 } 
 List<Integer> res = new ArrayList<>(); 
 for (Integer integer : numbers) { 
  res.add(integer+1); 
 } 
 return res; 
 } 
} 

而這段邏輯是從Datatables的js源碼中找到的,我將其轉(zhuǎn)化為java代碼。Datatables源碼的該部分代碼如下

function _numbers ( page, pages ) { 
 var 
  numbers = [], 
  buttons = extPagination.numbers_length, 
  half = Math.floor( buttons / 2 ), 
  i = 1; 
 
 if ( pages <= buttons ) { 
  numbers = _range( 0, pages ); 
 } 
 else if ( page <= half ) { 
  numbers = _range( 0, buttons-2 ); 
  numbers.push( 'ellipsis' ); 
  numbers.push( pages-1 ); 
 } 
 else if ( page >= pages - 1 - half ) { 
  numbers = _range( pages-(buttons-2), pages ); 
  numbers.splice( 0, 0, 'ellipsis' ); // no unshift in ie6 
  numbers.splice( 0, 0, 0 ); 
 } 
 else { 
  numbers = _range( page-1, page+2 ); 
  numbers.push( 'ellipsis' ); 
  numbers.push( pages-1 ); 
  numbers.splice( 0, 0, 'ellipsis' ); 
  numbers.splice( 0, 0, 0 ); 
 } 
 
 numbers.DT_el = 'span'; 
 return numbers; 
 } 
var _range = function ( len, start ) 
 { 
 var out = []; 
 var end; 
 
 if ( start === undefined ) { 
  start = 0; 
  end = len; 
 } 
 else { 
  end = start; 
  start = len; 
 } 
 
 for ( var i=start ; i<end ; i++ ) { 
  out.push( i ); 
 } 
 
 return out; 
 }; 

我將頁(yè)面的ajax請(qǐng)求分頁(yè)的數(shù)據(jù)做了封裝:

/** 
 * 
 */ 
//macro分頁(yè)跳頁(yè)調(diào)用方法,調(diào)用的頁(yè)面需要提供goPage(redirectpage)方法 
function jumpPage(totalPage) { 
 var redirectpage = $("#changePage").val(); 
 if(redirectpage == ""){ 
 $("#changePage").focus(); 
 }else{ 
 var rex = /^\d+$/; 
 if(!rex.test(redirectpage)){ 
  alert("頁(yè)碼輸入有誤,只能輸入不大于總頁(yè)數(shù)的正整數(shù)"); 
 }else{ 
  var pageNo = parseInt(redirectpage); 
  if(pageNo <= 0 || pageNo > totalPage){ 
  alert("頁(yè)碼輸入有誤,只能輸入不大于總頁(yè)數(shù)的正整數(shù)"); 
  }else{ 
  goPage(redirectpage) 
  } 
 } 
 } 
} 
 
$.fn.pagenation = function(options) { 
 
 //默認(rèn)參數(shù) 
 var defaults={ 
  url:"", 
  data:{},//參數(shù) 
  pageNo:1,//頁(yè)碼 
  pageSize:10,//頁(yè)面大小 
  pageSuccess:{}//分頁(yè)數(shù)據(jù)成功返回的回調(diào)函數(shù) 
 } 
 var _self = $(this); 
 options = $.extend(defaults,options); 
 var ajaxData = { 
 "pageNo":options.pageNo, 
 "pageSize":options.pageSize 
 }; 
 
 
 this.fnDraw = function(pageNo) { 
 if (typeof (options.data) == 'function') { 
  ajaxData = options.data(ajaxData); 
 } else { 
  ajaxData = $.extend(ajaxData,options.data); 
 } 
 if (pageNo != undefined) { 
  ajaxData['pageNo'] = pageNo; 
 } 
  
 $.ajax({ 
  url: options.url, 
  async: false, 
  type:"post", 
  data: ajaxData, 
  success: function(result,code,dd) { 
  _self.html(result); 
  if (typeof options.pageSuccess == 'function') { 
   options.pageSuccess(); 
  } 
  }, 
  error:function(){ 
  alert("操作失敗"); 
  } 
 }); 
 }; 
 
 this.init = function() { 
 this.fnDraw(1); 
 return this; 
 } 
 
 return this; 
 
} 

在主頁(yè)面調(diào)用:

<!DOCTYPE html> 
<html> 
<head> 
<meta charset="UTF-8"> 
<title>Insert title here</title> 
#set($ctx = ${request.getContextPath()}) 
<link rel="stylesheet" type="text/css" href="$ctx/assets/js/dataTables/jquery.dataTables.min.css" rel="external nofollow" /> 
 <link rel="stylesheet" type="text/css" href="$ctx/assets/js/dataTables/css/jquery.dataTables_theme.css" rel="external nofollow" /> 
 <script type="text/javascript" src="$ctx/assets/js/jquery-1.11.2.min.js"></script> 
 <script type="text/javascript" src="$ctx/assets/js/macro.pagination.js"></script> 
</head> 
<body> 
 <div class="dataTables_wrapper" id="pageDiv"> 
  
 </div> 
 <script type="text/javascript"> 
 var pagenation = $("#pageDiv").pagenation({ 
 url:"${ctx}/listData.do", 
 pageSize:20, 
 data:function (data) { 
  $("#searchForm [name]").each(function(i, n){ 
  data[$(n).attr('name')] = n.value; 
  }); 
  return data; 
 }, 
 pageSuccess:function(){ 
  
 } 
 }).init(); 
 
 function goPage(pageNo) { 
 pagenation.fnDraw(pageNo); 
 } 
 </script> 
</body> 
</html> 

其中pageSuccess參數(shù)是用來(lái)在ajax返回?cái)?shù)據(jù)成功后,需要做的一些操作。

這里說(shuō)的也不太明白,附上碼云的git地址:http://git.oschina.net/ivwpw/pagenation

其中并沒(méi)有做從數(shù)據(jù)庫(kù)插數(shù)據(jù)的部分,只是在Controller中模擬了頁(yè)面需要的數(shù)據(jù)。

以上這篇springMVC+velocity實(shí)現(xiàn)仿Datatables局部刷新分頁(yè)方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • java發(fā)送email一般步驟(實(shí)例講解)

    java發(fā)送email一般步驟(實(shí)例講解)

    下面小編就為大家?guī)?lái)一篇java發(fā)送email一般步驟(實(shí)例講解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09
  • Java中的Sentinel規(guī)則持久化詳解

    Java中的Sentinel規(guī)則持久化詳解

    這篇文章主要介紹了Java中的Sentinel規(guī)則持久化詳解,將限流配置規(guī)則持久化進(jìn)Nacos保存,只要刷新8401某個(gè)rest地址,sentinel控制臺(tái)的流控規(guī)則就能看到,只要Nacos里面的配置不刪除,針對(duì)8401上sentinel上的流控規(guī)則持續(xù)有效,需要的朋友可以參考下
    2023-09-09
  • Servlet注解之@WebInitParam多個(gè)InitParam的使用

    Servlet注解之@WebInitParam多個(gè)InitParam的使用

    這篇文章主要介紹了Servlet注解之@WebInitParam多個(gè)InitParam的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • JDK8中新增的Optional工具類基本使用

    JDK8中新增的Optional工具類基本使用

    Optional不是對(duì)null關(guān)鍵字的一種替代,而是對(duì)于null判定提供了一種更加優(yōu)雅的實(shí)現(xiàn),接下來(lái)通過(guò)本文給大家分享JDK8中新增的Optional工具類基本使用,感興趣的朋友跟隨小編一起看看吧
    2021-06-06
  • RocketMQ中消費(fèi)者概念和消費(fèi)流程詳解

    RocketMQ中消費(fèi)者概念和消費(fèi)流程詳解

    這篇文章主要介紹了RocketMQ中消費(fèi)者概念和消費(fèi)流程詳解,RocketMQ是一款高性能、高可靠性的分布式消息中間件,消費(fèi)者是RocketMQ中的重要組成部分,消費(fèi)者負(fù)責(zé)從消息隊(duì)列中獲取消息并進(jìn)行處理,需要的朋友可以參考下
    2023-10-10
  • Intellij無(wú)法創(chuàng)建java文件解決方案

    Intellij無(wú)法創(chuàng)建java文件解決方案

    這篇文章主要介紹了Intellij無(wú)法創(chuàng)建java文件解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • springboot獲取根目錄下lib目錄下文件位置

    springboot獲取根目錄下lib目錄下文件位置

    在 Spring Boot 項(xiàng)目中,如果你有一個(gè) lib 目錄,并且需要訪問(wèn)這個(gè)目錄下的文件,你可以通過(guò)幾種不同的方式來(lái)獲取該文件的位置,下面小編就來(lái)和大家詳細(xì)講講
    2024-12-12
  • 淺談JAVA如何生成UUID唯一標(biāo)識(shí)

    淺談JAVA如何生成UUID唯一標(biāo)識(shí)

    這篇文章主要介紹了淺談JAVA如何生成UUID唯一標(biāo)識(shí),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Java開(kāi)發(fā)框架spring實(shí)現(xiàn)自定義緩存標(biāo)簽

    Java開(kāi)發(fā)框架spring實(shí)現(xiàn)自定義緩存標(biāo)簽

    這篇文章主要介紹了Java開(kāi)發(fā)框架spring實(shí)現(xiàn)自定義緩存標(biāo)簽的詳細(xì)代碼,感興趣的小伙伴們可以參考一下
    2015-12-12
  • Java并發(fā)線程之線程池的知識(shí)總結(jié)

    Java并發(fā)線程之線程池的知識(shí)總結(jié)

    這篇文章主要介紹了Java并發(fā)線程之線程池的知識(shí)總結(jié),幫助大家更好的理解和學(xué)習(xí)Java并發(fā)線程的相關(guān)內(nèi)容,感興趣的朋友可以了解下
    2021-01-01

最新評(píng)論

新泰市| 大石桥市| 黄平县| 资兴市| 连山| 左权县| 五台县| 嘉善县| 崇明县| 涞源县| 额敏县| 西乌| 阜平县| 米林县| 台南县| 凭祥市| 金溪县| 响水县| 离岛区| 绥江县| 鹤壁市| 抚顺市| 铜川市| 淮南市| 托克逊县| 柞水县| 沙洋县| 阿拉尔市| 施秉县| 阿拉善右旗| 德昌县| 肇东市| 郴州市| 深水埗区| 淳安县| 犍为县| 杭锦旗| 兴国县| 沙田区| 九台市| 苍山县|