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[0][data][comparison] gt filter[0][data][type] numeric filter[0][data][value] 11 filter[0][field] id filter[1][data][comparison] lt filter[1][data][type] date filter[1][data][value] 04/20/2009 filter[1][field] date filter[2][data][type] list filter[2][data][value] small,medium filter[2][field] 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[i];
          var name = f.field;
          var value = f.data['value'];
          if( value != null ){
               if(f.data['comparison']!=null){
                     if(!p[name]) 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("@")[0]);
     String temp2 = sym.split("@")[1];
     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[0],n);
      String temp2 = this.getOneSymbol(sym[1],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[0],n);
                else
                       str = this.getTwoSymbol(strs,n);
          } else{
               return n + " like '%"+str+"%'";
        }
      }
      return str;
}


我注:经实际操作,做到第二步就够了,后台得到的就是页面上的具体参数

你可能感兴趣的:(java,css,F#,ext,IE)