leon1509 发表于 2013-1-29 07:29:21

ext grid filter和java后台的整合使用

首先Ext的grid2.2版本好像在ie下图片格式不正确,主要是css样式表的问题,换成ext.2.1.css的就行了。

官方的例子:http://extjs.com/deploy/dev/examples/grid-filtering/grid-filter.html

过滤的时候传回去的参数是这个样子的:
dir ASC filter gt filter numeric filter 11 filter id filter lt filter date filter 04/20/2009 filter date filter list filter small,medium filter size limit 15 sort company start 0

什么怪东西,估计是Php用起来比较方便的格式,所以要修改一下GridFilters.js的代码: 替换原来有的
buildQuery: function(filters){      var p = {};   for(var i=0, len=filters.length; i<len; i++) {          var f = filters;          var name = f.field;          var value = f.data['value'];          if( value != null ){               if(f.data['comparison']!=null){                     if(!p) p[ name ] = '';                     p[ name ] += f.data['comparison']+'@'+value+',';               }else{                     p[ name ] = value;               }          }      }      return p;},

这样传到后台参数就是例如:

name为aaa,
num小于100大于20,
date在2009-1-1到2009-1-2号之间:
name = aaa
num = gt@20,lt@100,
date = gt@2009-1-1,lt@2009-1-2,

后来解析一下这种格式以后拼接sql语句:
//获取一个范围的字符串private String getOneSymbol(String sym,String n){   String temp1 = this.getSuffix(sym.split("@"));   String temp2 = sym.split("@");   if(temp2.indexOf("-") != -1)         return n+" "+temp1+ " '"+temp2+"' ";   else         return n+" "+temp1+" "+temp2+" ";}//获取有两个范围的字符串private String getTwoSymbol(String[] sym,String n){      String temp1 = this.getOneSymbol(sym,n);      String temp2 = this.getOneSymbol(sym,n);      return temp1+" and " +temp2;}//解析范围字符串private String analysis(String str,String n){      if(str != null){          if(str.indexOf(",") != -1){                String[] strs = str.split(",");                if(strs.length == 1)                     str = this.getOneSymbol(strs,n);                else                     str = this.getTwoSymbol(strs,n);          } else{               return n + " like '%"+str+"%'";      }      }      return str;}

我注:经实际操作,做到第二步就够了,后台得到的就是页面上的具体参数
页: [1]
查看完整版本: ext grid filter和java后台的整合使用