`

jquery分页时 数据与现实分离

阅读更多

在日常的工作中分页的使用的频率相对来说比较高,最近学习了jquery封装了一个用于数据显示分页的代码

利用jquery 的选择器 将标签的集合看成一个数组 然后利用数据量的多少来 显示内容

例如:

<ul id="lis">

  <li><h3></h3><span><img src=""></span></li>

 <li><h3></h3><span><img src=""></span></li>

 <li><h3></h3><span><img src=""></span></li>

 <li><h3></h3><span><img src=""></span></li>

 <li><h3></h3><span><img src=""></span></li>

 <li><h3></h3><span><img src=""></span></li>

</ul>
  上一页 1 2 3...7 下一页

funciton printData(n,data) {

var curLi= $("lis li").eq(n);0...n; 
curLi.find("h3").text (data.imageName)          //("第n张图片");

curLi.find("img").attr("src",data.src).attr("alt",data.imageName)   //   ("第n张图片");

var pa=$("#photoList li")li的集合

 }

使用:

(将标签里面的属性或者数据替换)
function initPage(sendData) {
//对象数据
var option={
//当前页面的对象
curPageElement:$("#photoList li"),
//数据 遍历
dataPagingInfo:{
dataPaging:$("#imagePage"),  //页码数
pageSize:"20", //每页显示的数据大小
current:"1"    //当前页
},
sendData:sendData,
url:"/admin/photo/action.do",
//回调方法
backMethods:{
//输出数据
printData:function(i,data) {
pa.eq(i).text(data.content);
       },
//数据 的长度
       dataLen:function(length) {

       $("#imageSum").text(length);
       }
       }
  }

//初始化参数
pageList.init(option);

//刷新当前页面
pageList.coreFlow();
}

一、pageList.js(分页时的数据交互)

// 减少不必要的 请求 进一步增强用户体验对 和 缓解服务器 压力
//   思路:
// 1、在对象后面添加 一个method保存页码
// 2、这个页码作为 缓存对象的标识符 每次检查这个标识符 确认是否存 缓存缓存过这个对象
//option中的参数说明
/***
* 前台页面 遍历思路
* 适合于分页遍历的数据
*   分析:
*    1、数据显示 只和  html的展现形式有关系  与  html本身的构造无关
*    2、事件只和 html本身的构造有关系 和   数据的显示无关
*       此种方式 完全脱离  服务器编程语言的限制
* 此时html完全静态化通过apach转发不依赖于后台程序:
* 对于服务器来说只需要提供结构化的数据(json)
* 而客户端则通过js直接请求json数据 再将其填充到html代码中 在效果体现方面html代码只有show 和hide的体现形式
*
* 优点: 1、有利于 服务器集群扩展
*   2、缓解的数据的并发量
*   3、静态化的页面替代了传统的jsp 减少了jsp 到 class的这一过程 加快了服务器运行的速度
*
* 传统显示的分析:
*       1、将数据显示和html代码混为一趟 造成html随数据的改变而重构
*       2、重构也带来了事件的重复绑定
*
*
*
此js依赖于 jquery.js jquery.util1.1.js 用于数组遍历  发送请求   jquery.pageFoot.js 用于分页 (借鉴了别人的)
***/


var pageList={
//对象数据
option:{
//当前页面的数据
curDatas:"",
//当前页面的对象
curPageElement:"",
//数据 遍历
dataPagingInfo:{
dataPaging:"",
pageSize:"4",
current:"1",
count:"",
pgCount:"",
//是否启用缓存
isCache:"true"
},
sendData:"",
url:"",
//回调方法
backMethods:{
//输出数据
printData:"",
//没有数据是触发
dataLen:""
},
reqArg:{
//同步与否
async:false
}
},
//缓存对象
caches:{},
//在缓存中添加数据
addCachData:function(data) {
//添加一个属性缓存这个对象
data.curIndex=this.getCurPage();
this.caches.push(data);
},
//检查 数据是否存在于 之中 如果用则返回这个对象 反之 则返回空
checkCaches:function() {
var page=this.getCurPage();
//检查 数据是否缓存
var fObj=objectUtil.findByProperty(page,"curIndex",this.caches);
if(fObj==null) {
return null;
}
//重缓存中获取数据
this.option.curValues=fObj;
return fObj;
},
//将数据一次性添加到缓存
addCachAllData:function(caches) {
this.caches=caches;
},
//是否运行虚拟页面效果
isVirtual:function() {
return this.option.dataPagingInfo.virtual;
},
//设置默认的数据作为缓存效果
setDefCache:function(delData) {
this.option.curValues.datas=delData;
//默认情况计算缓存分页
if(!this.option.dataPagingInfo.isPage)
this.virtualCount();
},
setisVirtual:function(virtual) {
this.option.dataPagingInfo.virtual=virtual;
},
// 不需要请求数据 的分页效果
virtualCount:function() {
var pageSize = this.option.dataPagingInfo.pageSize;
var caches=new Array();
var datas=this.option.curValues.datas;
//根据数据的大小计算出分页大小
//1、计算数据的量
var count=datas.length;
this.option.curValues.total=count;
//2、计算分页数量
var pageCount=parseInt((count%pageSize==0)?count/pageSize:(count/pageSize)+1);
var n=0;
for(var i=0;i<pageCount;i++) {
var daryy=new Array();
var data={};
for(var j=0;j<pageSize;j++) {
if(datas[n]) {
daryy.push(datas[n++]);
}
}
data.datas=daryy;
data.curIndex=i+1;
data.total=count;
this.caches.push(data);
}
this.option.curValues=this.caches[0];
//开启缓存
this.setCaches=true;
this.option.dataPagingInfo.virtual=false;
},
//设置url
setUrl:function(ur) {
this.clearCache();
this.Option.url=ur;
},
//设置当前页码数 (当前第几页)
setCurrentPage:function(page) {
this.option.dataPagingInfo.current=page;
},
//设置当前页面大小
setPageSize:function(size) {
this.option.dataPagingInfo.pageSize=size;
},
//缓存开关
isCaches:function() {
return this.option.dataPagingInfo.isCache;
},
setCaches:function(isCache) {
this.option.dataPagingInfo.isCache=isCache;
},
setCurPageCaches:function(curValue) {
this.caches[this.getCurPage()-1]=curValue;
},
//设置当前遍历对象
setCurPageElement:function(obj) {
this.clearCache();
this.option.curPageElement=obj;
},
init:function(option) {
$.extend(this.option,option);
$.extend(this.option,this.option,this.backMethods);
//默认开启缓存
this.option.dataPagingInfo.isCache=true;
this.caches=new Array();
},
setSendData:function(sendData) {
this.clearCache();
this.option.sendData=sendData;
},
//获取当前的数据
getCurList:function() {
return this.option.curDatas;
},
//获取当前 显示的数组
getDatasList:function() {
return this.option.curValues.datas;
}
,
//复位分页
resetPage:function() {
this.option.dataPagingInfo.current=1;
},
//获取总数量
getCount:function() {
return this.option.dataPagingInfo.count;
},
//获取当前的总数量
getCurCount:function() {
return this.option.curDatas.length;
},
//请求数据
reqService :function() {
//定义默认分页
this.option.dataPagingInfo.current=this.getCurPage()||1;
//定义默认分页大小
this.option.dataPagingInfo.pageSize=this.option.dataPagingInfo.pageSize||2;

//获取当前页码
this.option.sendData.page=this.getCurPage();
//设定每一页显示的数据
this.option.sendData.pageSize=this.option.dataPagingInfo.pageSize;
var curUrl=this.option.url;
var reqnew = new ReqNewDatas(); //jquery.util1.1.js中
reqnew.isAsync(this.option.reqArg.async);
if(reqnew.getDatas(curUrl,this.option.sendData)){
this.option.curValues = reqnew.curDatas;
return true;
}
return false;

},
//检查是否清空缓存
checkClear:function() {
if(!this.option.dataPagingInfo.oldPage||this.option.dataPagingInfo.oldPage==this.getCurPage()){
this.caches=new Array();
return true;
}
return false;
},
//清空缓存
clearCache:function() {
this.caches=new Array();
},
//回调显示
callShow :function() {
this.option.dataPagingInfo.count=this.option.curValues.total;
this.option.curDatas=this.option.curValues.datas;

//数据的总长度
this.option.backMethods.dataLen(this.option.curValues.total,this);

//根据数据量显示或者隐藏标签
this.controlStyle(this.option.curValues.datas.length);

//记录上一次分页
this.option.dataPagingInfo.oldPage=this.getCurPage();
//显示数据量
objectUtil.iterElement(jQuery.proxy(this.option.backMethods.printData, this),this.option.curValues.datas);

//默认情况下计算分页
if(!this.option.dataPagingInfo.isPage) {
//计算分页
this.scrPage();
this.option.dataPagingInfo.dataPaging.show();
} else {
this.option.dataPagingInfo.dataPaging.hide();
}
if(typeof this.option.backMethods.finish=="function")
//所有遍历完成之后
this.option.backMethods.finish();
},
//核心控制 1、先检查缓存 2、根据是否缓存数据 而请求
coreFlow :function() {
//检查是否清空缓存
this.checkClear();
if(this.checkCaches()==null) {
//请求数据
if(this.reqService()) {
//运行虚拟数据分页效果
if(this.isVirtual()) {
this.virtualCount();
}else
//检查是否将数据 缓存起来
if(this.option.dataPagingInfo.isCache) {
this.addCachData(this.option.curValues);
}
}
}
//回调
this.callShow();

},
controlStyle:function(curCount) {
this.hideStyle(curCount);
this.showStyle(curCount);
},
//数据显示效果的实现 隐藏没有数据的项
showStyle:function(curCount) {
if(curCount<this.option.dataPagingInfo.pageSize) {
for(var i=curCount;i<this.option.dataPagingInfo.pageSize;i++) {
this.option.curPageElement.eq(i).hide();
}
}
},
hideStyle:function(curCount) {
for(var i=0;i<curCount;i++) {
this.option.curPageElement.eq(i).show();
}
},
setFootOption:function(option) {
$.extend(this.option.dataPagingInfo,option);
},
//分页
scrPage :function() {
var _this=this;
var displaynum=this.option.dataPagingInfo.displaynum;
if(!displaynum) displaynum=3;
var displaylastNum=this.option.dataPagingInfo.displaylastNum;
if(!displaylastNum) displaylastNum=1;
var css=this.option.dataPagingInfo.css;
if(!css) css="mj_pagefoot";
this.option.dataPagingInfo.dataPaging.pagefoot({
pagesize:this.option.dataPagingInfo.pageSize,//每页显示6条
count:this.option.dataPagingInfo.count,//总记录
current:this.option.dataPagingInfo.current,   //当前页码
css:css,
displaynum:displaynum, //中间显示页码数
displaylastNum:displaylastNum, //最后显示的页码数
    previous:" &nbsp; ",
    next:" &nbsp; ",
paging:function(page) {
_this.option.dataPagingInfo.current=page;
_this.coreFlow();
},
getPgCount:function(pgCount) {
_this.option.pgCount=pgCount;
}
});
},
//获取当前页面
getCurPage:function() {
return this.option.dataPagingInfo.current;
},
//总页面数量
getPgCount:function() {
return this.option.pgCount;
}
}

 

 

 

 

 

jquery.utils.js封装的一个工具包

//对象工具操作类
 var objectUtil={
  //id 字段值 property字段值对应属性 datas集合
  findByProperty :function(id,property,datas) {
   for(var i=0;i<datas.length;i++) {
    if(datas[i][property]==id) {
     return datas[i];
    }
   } 
   return null;
  },
  
  //根据这个元素找到他所对于的下标值
  findSuffixByProperty:function(id,property,datas) {
   for(var i=0;i<datas.length;i++) {
    if(datas[i][property]==id) {
     return i;
    }
   } 
   return null;
  },
  //遍历元素 fun遍历函数 datas数据集合
  iterElement :function(fun,datas,args) {
   if(datas) {
    for(var i=0;i<datas.length;i++) {
     if(!args) {
      fun(i,datas[i]);
     } else {
      fun(i,datas[i],args);
     } 
    }
   }
  },
  //根据字段类型的某个值 返回相应的集合 values="1,2,4,8";
  //
        //    var ab=[{id:1,text:"我扩大是否1"},{id:2,text:"我扩大是否2"},{id:2,text:"我扩大是否3"},{id:1,text:"我扩大是否4"}];
        //    var arry=objectUtil.findByPropertys("1,2","id",ab);
        //    for(var i=0;i<arry.length;i++) {
        //     var vs="";
        //     for(var j=0;j<arry[i].values.length;j++) {
  //    vs+=" id:"+arry[i].values[j].id+"  text:"+arry[i].values[j].text+",  ";              
        //     }
        //     alert(arry[i].typeId+"    "+vs);
        //    }
  //
  // 按照类型排序 0,1
  findByPropertys:function(values,property,datas,isSort) {
   var vs=values.split(",");
   var arry=new Array();
   for(var i=0;i<vs.length;i++) {
    var data=new Object();
    data.typeId=vs[i];
    data.values=new Array();
    arry.push(data);
   }
   var sortArry="";
   if(isSort)
    sortArry=new Array();
    
   for(var j=0;j<arry.length;j++) {
    for(var i=0;i<datas.length;i++) {
     if(datas[i][property]==parseInt(arry[j].typeId)) {
      if(!isSort) {
       arry[j].values.push(datas[i]);
      } else {
       sortArry.push(datas[i]);
      }
     }
    }
   }
   if(isSort)
    return sortArry;
   return arry;   
  }
 }
 
 var ArryHandle=function(option) {
  this.init(option);
 } 
 //对数组的操作
 ArryHandle.prototype={
  curArray:"",
  //idProperty唯一性标识符字段
  option:{
   idProperty:"",
   maxLen:"",
   index:0
  },
  init:function(option) {
   $.extend(this.option,option);
   if(typeof this.curArray!="Array") {
    this.curArray=new Array();
   }
  },
  //元素过长 返回1  成功返回 0 有重复元素放回 2; cover表示是否覆盖元素默认不覆盖
  addElement:function(obj,cover) {
   if(this.getCurLen()>this.option.maxLen-1) {
    return 1;
   }
   //检查数组是否有重复的元素
   var curObj = objectUtil.findByProperty(obj[this.option.idProperty],this.option.idProperty,this.curArray);
   if(curObj!=null&&!cover) return 2;
    this.curArray.push(obj);
   return 0;
  },
  //获得当前数组的长度
  getCurLen:function() {
   return this.curArray.length;
  },
  //获取最后一个元素的索引值
  getLastIndex:function() {
   var len=this.getCurLen();
   return len-1;
  },
  //根据这个对象删除 一个元素
  delElement:function(obj,shiffix) {
   var index=this.findIndex(obj);
   if(index!=null) {
    this.shifArray(index,shiffix);
    return index;
   }
   return null;
  },
  shifArray:function(index,shiffix) {
   for(var i=index;i<this.curArray.length;i++) {
    if(this.curArray[i+1]) {
      this.curArray[i]=this.curArray[i+1];
      if($.isFunction(shiffix)) {
       shiffix(this.option.pageArray.eq(i),this.option.pageArray.eq(i+1));
      }
    }
   }
   this.curArray.pop();
  },
  //根据当前元素寻找它在数组中的索引
  findIndex:function(obj) {
   return objectUtil.findSuffixByProperty(obj[this.option.idProperty],this.option.idProperty,this.curArray);
  },
  //查找某个元素
  findByProeprty:function(id) {
    return objectUtil.findByProperty(id,this.option.idProperty,this.curArray);
  }
 }
 
 var reqDatas={
  //当前的数据集合
  curDatas:"",
  type:"get",
  async:false,
  //获取数据
  setType:function(type) {
   this.type=type;
  },
  getDatas:function(ul,data) {
   ul+="?t="+Math.random()*10000;
   var datas =  $.ajax({
    url:ul ,
    data:data, 
    type:this.type,
     async: this.async
   }).responseText;
   if(datas.length>0) {
    this.curDatas= jQuery.parseJSON(datas);
    return true;
   }
   return false;
  }
 }
 
 var ReqNewDatas=function() {} 
 ReqNewDatas .prototype={
  //当前的数据集合
  curDatas:"",
  type:"get",
  async:false,
  //获取数据
  setType:function(type) {
   this.type=type;
  },
  isAsync:function(async) {
   this.async=async;
  },
  getDatas:function(ul,data) {
   ul+="?t="+Math.random();
   var datas =  $.ajax({
    url:ul ,
    data:data, 
    type:this.type,
     async: this.async
   }).responseText;
   if(datas.length>0) {
    this.curDatas= jQuery.parseJSON(datas);
    return true;
   }
   return false;
  }
 }

 

/* 借鉴了别人的
******生成js分页脚******
****没剑(2008-03-05)****
修改日期:2008-3-12
添加两个参数:displaynum,displaylastNum可以自由定制显示的页码数量

参数:  pagesize:10  //每页显示的页码数
        ,count:0                //数据条数
        ,css:"mj_pagefoot"      //分页脚css样式类
        ,current:1              //当前页码
  ,displaynum:7   //中间显示页码数
  ,displaylastNum:5  //最后显示的页码数
        ,previous:"上一页"      //上一页显示样式
        ,next:"下一页"          //下一页显示样式
        ,paging:null            //分页事件触发时callback函数
       
使用:
 $("div").pagefoot({
     pagesize:10,
     count:500,
     css:"mj_pagefoot",
     previous:"<",
     next:">",
     paging:function(page){
       alert("当前第"+page+"页");
      }
 });
 以上代码为所有div加上分页脚代码
*/
jQuery.pagefoot =
{
    //生成分页脚
    create:function(_this,s){
   
   
   
        var pageCount=0;
      
        //计算总页码
        pageCount=(s.count/s.pagesize<=0)?1:(parseInt(s.count/s.pagesize)+((s.count%s.pagesize>0)?1:0));
       
       
       
       
              if(!$.pagefoot.getPgCount(pageCount,s.getPgCount))
             return false;
       //检查当前页是否超过最大页
        s.current=(s.current>pageCount)?pageCount:s.current
       
       
         //扩展分页
     if(s.extendPage) {
       //下一页是否存在
       var isNext;
           //创建下一页
          if(s.current>=pageCount){
              strPage+="<span class=\"disabled\">"+s.next+"</span>";
              isNext=false;
          }else{
              extendPage.prev.data("curNum",s.current+1);
              isNext=true;
          }
        
       
      
     
      return false;
     }
     
     
        //循环生成页码
        var strPage="";
       
        //创建上一页
        if(s.current<=1){
            strPage+="<span class=\"prev-disabled page-bg\">"+s.previous+"</span>";
        }else{
            strPage+="<a href=\""+(s.current-1)+"\">"+s.previous+"</a>";
        }
       
       
        //开始的页码
        var startP=1;
        startP=1
    var anyMore;//页码左右显示最大页码数
    anyMore=parseInt(s.displaynum/2)
        //结束的页码
        var endP=(s.current+anyMore)>pageCount?pageCount:s.current+anyMore;

        //可显示的码码数(剩N个用来显示最后N页的页码)
        var pCount=s.pagesize-s.displaylastNum;
        if(s.current>s.displaynum){//页码数太多时,则隐藏多余的页码
            startP=s.current-anyMore;
            for(i=1;i<=s.displaylastNum;i++){
                    strPage+="<a href=\""+i+"\">"+i+"</a>";
            }
            strPage+="...";
        }
        if(s.current+s.displaynum<=pageCount){//页码数太多时,则隐藏前面多余的页码
            endP=s.current+anyMore;
        }else{
            endP=pageCount;
        }
        for(i=startP;i<=endP;i++){
            if(s.current==i){
                strPage+="<span class=\"current\">"+i+"</span>";
            }else{
                strPage+="<a href=\""+i+"\">"+i+"</a>";
            }
        }
        if(s.current+s.displaynum<=pageCount){//页码数太多时,则隐藏后面多余的页码
            strPage+="...";
            for(i=pageCount-s.displaylastNum+1;i<=pageCount;i++){
                    strPage+="<a href=\""+i+"\">"+i+"</a>";
            }
        }
       
       
       
        //创建下一页
        if(s.current>=pageCount){
            strPage+="<span class=\"next-disabled page-bg\">"+s.next+"</span>";
        }else{
            strPage+="<a href=\""+(s.current+1)+"\">"+s.next+"</a>";
        }
    
        $(_this).empty().append(strPage).find("a").click(function(){
            //得到翻页的页码
            var ln=this.href.lastIndexOf("/");
            var href=this.href;
            var page=parseInt(href.substring(ln+1,href.length));
            s.current=page;
            //外部取消翻页时...
            if(!$.pagefoot.paging(page,s.paging))
             return false;
            $.pagefoot.create(_this,s);
            return false;
        });
        return this;
    },
    paging:function(page,callback){
        if(callback){
            if(callback(page)==false)
            return false;
        }
        return true;
    },
    getPgCount:function(count,callback) {
       if(callback){
        
            if(callback(count)==false)
            return false;
        }
        return true;
    }
}
//扩展绑定上下页
jQuery.fn.pagefoot= function(opt)
{
 /*参数定义*/
    var setting = {pagesize:10  //每页显示的页码数
        ,count:0                //数据条数
        ,css:"mj_pagefoot"      //分页脚css样式类
        ,current:1              //当前页码
  ,displaynum:3   //中间显示页码数
  ,displaylastNum:1  //最后显示的页码数
        ,previous:"上一页"      //上一页显示样式
        ,next:"下一页"          //下一页显示样式
        ,extendPage:null  //扩展分页
        ,paging:null
        ,getPgCount:null         //分页事件触发时callback函数
 };
 opt= opt || {}
 $.extend(setting, opt);
    return this.each(function(){
        $(this).addClass(setting.css);
        $.pagefoot.create(this,setting);
    });
}

 

分享到:
评论

相关推荐

    ajax动态树型目录

    在IT领域,Ajax(Asynchronous JavaScript and XML)是一种创建交互式网页应用的技术,它通过后台与服务器异步数据交换,使网页实现局部刷新,提升了用户体验。动态树型目录是Ajax技术的一种常见应用,通常用于文件...

    java开源包1

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包11

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包2

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包3

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包6

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包5

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包10

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包4

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包8

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包7

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包9

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    java开源包101

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    Java资源包01

    GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以...

    JAVA上百实例源码以及开源项目源代码

    Java数据压缩与传输实例 1个目标文件 摘要:Java源码,文件操作,数据压缩,文件传输 Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、...

Global site tag (gtag.js) - Google Analytics