struts2+spring+hibernate+json+jquery+flexigrid开发笔记-flexigrid改造

来源:互联网 发布:17网络批发市场 编辑:程序博客网 时间:2024/05/22 06:29

  好长时间都没有写博客了,今天终于把项目搞的差不多了,抽点时间来把我的笔记写完吧

  在使用flexigrid的时间,大家都可能会遇到一个相同的问题:flexigrid的初始化实在有点麻烦,而且代码感觉有些杂乱.花了一天的时间,对其进行了改造,使得fexigrid可以像使用dhtmlxgrid一样的进行初始化,减少了代码的传输量.下面是改造后的flexigrid初始化代码

 

<script type="text/javascript">
  $(document).ready(function(){
  var a=new creater("grid","Listclient.action","post","json","id","desc","true","客户信息","true","902","200");

//这里传送一些初始化信息

  a.setHeadName("选择","客户姓名","客户地址","客户电话","客户性别","身份证号","手机号","创建时间");

//定义表头
  a.setName("select","clientName","clientAddr","clientHtel","clientSex","clientCertificate","clientTel","createTime");

//定义表头name值
  a.setWidth("30","180","180","100","100","100","100","100");

//定义表格宽度
  a.setSortable(true,true,false,false,false,false,false,false);

//是否排序

  a.setShowable(false,false,false,false,false,false,false,false);

//是否显示
  a.setAlign("center","center","center","center","center","center","center","center");

//对齐方式
  a.setButtonName("查看","增加","删除","修改");

//安钮
  a.setBclass("userBt","userBt","userBt","userBt");
  a.setOnpress("operate","operate","operate","operate")

//安钮点击后打开的页面
  a.setAdd("clientadd.jsp","600","400");
  a.setUpdate("clientupdate.jsp","600","400");
  a.setDetail("clientdetail.jsp","600","400");
  a.showtable();//创建表格
        });
  </script>

 

下面是改造后的js处理

  /**改造的flexigrid的构造方式
     */
     //这些数组主要用来存入colModel里面的数据
     var headName=new Array();//用于存放表头信息
  var name=new Array();//用于存放表头的字段名
  var width=new Array();//用于存放表头的宽度
  var showable=new Array();//用于存放是否显示字段信息
  var sortable=new Array();//用于存放表头是否排序
  var align=new Array();//用来存放是对齐方式
  var buttonName=new Array();//用来存放安钮的名字
  var bclass=new Array();//用来存放安钮的样式
  var onpress=new Array();//用来存入安钮事件的名字
  var table="[";
  var button="[";
 var addwd;
  var addul;
  var addht;
  var updateul;
  var updateht;
  var updatewd;
  var findul;
  var findwd;
  var findht;
  var tab;
function creater(div,url,method,dataType,sortName,sortorder,usepager,title,useRp,width,height){
   this.div=div;
   tab=div;
   this.url=url;
   this.method=method;
   this.dataType=dataType;
   this.sortName=sortName;
   this.sortorder=sortorder;
   this.usepager=usepager;
   this.title=title;
   this.useRp=useRp; 
   this.height=height; //default height
    this.width=width;
}
creater.prototype.setHeadName=function(){//取得表头的名字
 for(var i=0;i<arguments.length;i++){
  headName[i]=arguments[i]
 }
 }
creater.prototype.setName=function(){//取得字段名
 for(var i=0;i<arguments.length;i++){
  name[i]=arguments[i]
 }
}
creater.prototype.setWidth=function(){//取得宽度
 for(var i=0;i<arguments.length;i++){
  width[i]=arguments[i]
 }
}
creater.prototype.setSortable=function(){//是否排序
 for(var i=0;i<arguments.length;i++){
  sortable[i]=arguments[i]
 }
}
creater.prototype.setShowable=function(){//是否显示
 for(var i=0;i<arguments.length;i++){
  showable[i]=arguments[i]
 }
}
creater.prototype.setAlign=function(){//取得对齐方式
 for(var i=0;i<arguments.length;i++){
  align[i]=arguments[i]
 }
}
creater.prototype.setButtonName=function(){//取得安钮的名字
 for(var i=0;i<arguments.length;i++){
  buttonName[i]=arguments[i]
 }
}
creater.prototype.setBclass=function(){//取得安钮的样式
 for(var i=0;i<arguments.length;i++){
  bclass[i]=arguments[i]
 }
}
creater.prototype.setOnpress=function(){//取得安钮对应的样式
 for(var i=0;i<arguments.length;i++){
  onpress[i]=arguments[i]
 }
}
creater.prototype.setAdd=function(url,width,height){//打开一个增加的新窗口
       addul=url;
     addwd=width;
     addht=height;
}
creater.prototype.setUpdate=function(url,width,height){//打开一个修改窗口
              updateul=url;
     updatewd=width;
     updateht=height;
}
creater.prototype.setDetail=function(url,width,height){//打开一个新窗口
              findul=url;
     findwd=width;
     findht=height;
}
creater.prototype.showtable=function(){//根据上面的信息创建表格
 if(headName.length==name.length&&width.length==align.length&&name.length==showable.length&&name.length==align.length){
  for(var i=0;i<headName.length;i++){

      if(i==headName.length-1){
                   table+="{display: '"+headName[i]+"', name: '"+name[i]+"', width:'"+ width[i]+"', sortable:"+sortable[i]+" , align:'"+ align[i]+"',hide:"+showable[i]+"}";
      }else{
    table+="{display: '"+headName[i]+"', name: '"+name[i]+"', width:'"+ width[i]+"', sortable:"+showable[i]+" , align:'"+ align[i]+"',hide:"+showable[i]+"},";
      }
     
    }
    table+="]";
  if(buttonName.length!=0&&buttonName.length==bclass.length&&bclass.length==onpress.length){
     for(var i=0;i<buttonName.length;i++){
     button+="{name: '"+buttonName[i]+"', bclass:'"+bclass[i]+"', onpress :"+ onpress[i]+"},"; 
  }
  button+="{separator: true}]" ;
  
  }
$("#"+this.div).flexigrid({
 url:this.url,
 width:this.width,
 height:this.height,
 dataType: this.dataType,
 colModel : eval(table),
 sortname: eval(this.sortname),
    sortorder: this.sortorder,
    usepager: eval(this.usepager),
 buttons:eval(button),
 title:this.title,
 useRp:eval(this.useRp),
 rp: 10,
 showTableToggleBtn: true,
 procmsg: '正在加载数据,请稍等...'

 });
 }else{
  alert("表格定义有误,请检查");
 }
}

 

 

//下面的处理方法可根据自己的业务需求重新定义
function operate(com,grid) //安钮事件
            {   
             if(com=='删除'){
             if(selectTrAll()<=0){
             alert("请选择你要删除的数据");
             return;
             }
             if(selectTrAll()>0){
            if(confirm("你真的要删除"+selectTrAll()+"条记录吗?")){
            //alert(getAllid());
            var datastr;
            datastr="delId="+getAllid();
         $.ajax({url:document.getElementById("delurl").value,
            type:'post',
            data:datastr,
            dataType:'json',
            timeout:1000,
            error:function(data) {
            alert(data.message);
            },
            success:function(data) {
                 alert("删除成功");
               $("#"+tab).flexReload();//刷新表格
 }
 })
             }
             }
             }
   if(com=="增加"){
          showadd();//
           return;
           }
     if(com=="修改"){
            if(selectTrAll()<=0){
            alert("请选择要修改的数据");
            return;
            }
           if(selectTrAll()>1){
           alert("修改只能选择一条数据,请重新选择");
              return;
           }
            updateopen();
            }          
   }
function showadd(){//打开一个新窗口
  $.funkyUI({
   url:addul,
   OKEvent:okEvent,
   css:{width:addwd,height:addht}
  });
 }
 function updateopen(){//打开一个新窗口
  $.funkyUI({
   url:updateul,
   OKEvent:okEvent,
   css:{width:updatewd,height:updateht}
  });
  }
  
  function detailopen(){//打开一个新窗口
  $.funkyUI({
   url:findul,
   OKEvent:okEvent,
   css:{width:findwd,height:findht}
  });
 }
  
  
  
  function updateInput(){//打开一个新窗口
        var datastr;
      
            if(document.getElementById("beanName").value!=""){
            datastr=document.getElementById("beanName").value+".ufId="+getpId();
            }else{
            datastr="ufId="+getpId();
            }
            // alert(datastr);
       $.ajax({
      url:document.getElementById("updateurl").value,
            type:'post',
            data:datastr,
            dataType:'json',
            timeout:1000,
            error:function(data) {
            alert(data.message);
            },
            success:function(data) {
            /**
            这一段代码可以得到子窗口的window对象
          
            var win=document.getElementsByTagName("iframe")[0].id;
             alert(win);
             var inp=window.frames[win].document.getElementById("form");
             //var inp=$(window.frames[win].document).find(":input");
             alert(inp[0].id);
             */
             //这里要求后台传来的数据顺序和前台rform表单对应,不然会出错.
          var inp=document.getElementById("form");
          for(var i=0;i<inp.length-2;i++){
          inp[i].value=data.updateData[i];
          if(inp[i].id=="unit"){
          doOrgChg(inp[i]);
          }
          if(inp[i].id=="org"){
          if(data.updateData[i]!=0){
             doOreEmp(inp[i]);
          }
          }
 }
 }
 });
 }
 
 function detail(){
  var datastr;
       // alert(document.getElementById("detailurl").value);
            if(document.getElementById("beanName").value!=""){
            datastr=document.getElementById("beanName").value+".ufId="+getpId();
            }else{
            datastr="ufId="+getpId();
            }
       $.ajax({
      url:document.getElementById("detailurl").value,
            type:'post',
            data:datastr,
            dataType:'json',
            timeout:1000,
            error:function(data) {
            alert(data.message);
            },
            success:function(data) {
            /**
            这一段代码可以得到子窗口的window对象
          
            var win=document.getElementsByTagName("iframe")[0].id;
             alert(win);
             var inp=window.frames[win].document.getElementById("form");
             //var inp=$(window.frames[win].document).find(":input");
             alert(inp[0].id);
             */
             var tab=document.getElementsByTagName("table");
             //alert(tab[0].rows.length);
             var row=tab[0].rows;
            // alert(row.item(0).cells.length);
             var jj=0
           for(var i=0;i<row.length;i++){
               var cell=row.item(i).cells;
               for(var j=1;j<cell.length;j+=2){
                   if(data.updateData[jj]!=undefined&&data.updateData[jj]!="undefined"){
                   cell[j].innerText=data.updateData[jj];
                   }
                   jj++;
               }
               }
          }
 });
 
 
 }
 
 
 
 //checkbox的选中与取消事件
 function selectTr(e){
  var clazz=document.getElementById("row"+e);
  if(document.getElementById(e).checked!=true){
  clazz.className="";
  }else{
  clazz.className="trSelected"; 
  }   
 }
 
  //得到选中行的某列数据
 function selectTrtext(cell){
        return $('.trSelected',grid)[0].cells[cell].innerText;
 }
 function selectTrAll(){
 return $('.trSelected',grid).length;
 }
 function getId(){
 
 return $('.trSelected',grid)[0].id.substring(3);
 }
 function getpId(){
 return $(window.parent.document).find('.trSelected',$('gird', window.parent.document)
)[0].id.substring(3);;
 }
 function getAllid(){
          var idstr="";
          var allTr=$('.trSelected',grid);
          for(var i=0;i<allTr.length;i++){
          idstr+=allTr[i].id.substring(3)+",";
                  }
                  return idstr;
}
function getFormAndFormWrite(form,data){
          var form=document.getElementById(form);
          /**这一段可用来遍列整个json对象里面的元素,现在用不上了,不删除留等
          var data=new Array();
          var j_ii=0;
           for (var one in data)
        {
        for(var key in data[one])
        {
            data[j_ii]=data[one][key];
            alert(data[j_ii]);
            j_ii++;
        }
    }
    */
          for(var i=0;i<form.length-btcount;i++){
          form[i].value=date[i];
          } 
}

 

通过这样改造后,可以减少flexigerid初始化的代码,而且简单明了.如果有看不董的地方请留言.另外说是且点,我在很多网站转载了我写的文章,麻烦转载时请注明作者.邓长松