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]