六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 74|回复: 0

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

[复制链接]

升级  90.33%

143

主题

143

主题

143

主题

举人

Rank: 3Rank: 3

积分
471
 楼主| 发表于 2013-1-29 07:29:21 | 显示全部楼层 |阅读模式
首先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;}

我注:经实际操作,做到第二步就够了,后台得到的就是页面上的具体参数
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表