【问题标题】:Gridx Server-side filtering - reference? example?Gridx 服务器端过滤 - 参考?例子?
【发布时间】:2014-08-29 19:36:40
【问题描述】:

我已经成功创建了一个:

  • Gridx 使用 JSONStore
  • 使用“Range : items=0-99”标头的服务器端分页
  • 使用“sort(+name)”进行服务器端排序

...但经过 大量 的努力和搜索,我无法设置 Filterbar 模块来执行服务器端过滤。

我已经使用“filterSetupQuery”从 JSON 中提取信息(在客户端)并附加到获取 URL 以获得非常基本的过滤器,但是对于复杂的过滤器,在基于 Java 的控制器中处理 JSON 似乎更有意义在服务器上。

这个 Java 类和 FlexJson 反序列化器会是什么样子? 有人有服务器端过滤的参考实现,甚至有一个例子来说明如何在 Java 中反序列化这个对象吗?

这是一个发送回控制器的简单 JSON 对象:

{  "op":"and",
 "data":[{  "op":"or",
          "data":[{"op":"contain","data":[{"op":"string","data":"1","isCol":true},
                                          {"op":"string","data":"john"}]},
                  {"op":"contain","data":[{"op":"string","data":"2","isCol":true},
                                          {"op":"string","data":"john"}]},
                  {"op":"contain","data":[{"op":"string","data":"3","isCol":true},
                                          {"op":"string","data":"john"}]},
                  {"op":"contain","data":[{"op":"string","data":"4","isCol":true},
                                          {"op":"string","data":"john"}]}
]}]}

非常感谢任何帮助! 谢谢 克里斯

【问题讨论】:

    标签: java javascript spring flexjson dojo.gridx


    【解决方案1】:

    你可以查看gridx源代码..在\tests\test_grid_filter_serverside.html下

    filterSetupFilterQuery: function(expr){
                var toExpr = function(expr){
                    if(!expr){ return ""; }
                    if(typeof expr.data != "object"){
                        if(expr.isCol){
                            return "column(\"" + expr.data + "\")";
                        }
                        return "\"" + expr.data + "\"";
                    }else{
                        var exprs = [];
                        for(var i in expr.data){
                            exprs.push(toExpr(expr.data[i]));
                        }
                        var op = expr.op;
                        if(expr.op == "and"){
                            op = "logicand";
                        }
                        if(expr.op == "or"){
                            op = "logicor";
                        }
                        return op + "(" + exprs.join(",") + ")";
                    }
                };
                console.log("expr is: ", expr);     
    
                var newExpr = toExpr(expr);
                if(newExpr){ newExpr += ";"}
                console.log("expr is: ", newExpr);      
                return {query: newExpr};    
            },
    

    ,上面的函数输出类似..

    logicor(logicor(contain(column("1"),"drawal"),contain(column("2"),"drawal"),contain(column("3"),"drawal"),contain(column("4"),"drawal"),contain(column("5"),"drawal"),contain(column("6"),"drawal"),contain(column("7"),"drawal")));
    

    我能够将函数更改为如下所示的输出 sql

    var toExpr = function(expr) {
                                        if (!expr) {
                                            return "";
                                        }
                                        if ( typeof expr.data != "object") {
                                            if (expr.isCol) {
                                                return cols.item(expr.data);
                                                // return "column(\"" + expr.data + "\")";
                                            }
                                            return "\"" + expr.data + "\"";
                                        } else {
                                            var exprs = [];
                                            for (var i in expr.data) {
                                                exprs.push(toExpr(expr.data[i]));
                                            }
                                            var op = expr.op;                                           
    
                                            if (op == 'not') {
                                                return "(" + exprs[0].replace(/=/, '<>').replace(/like/, ' not like ') + ")";
                                            }
    
                                            if (op == 'contain') {
                                                return "(" + exprs[0] + ' like ' + exprs[1].replace(/^"/, '"%').replace(/"$/, '%"') + ")";
                                            }
    
                                            if (op == 'startWith') {
                                                return "(" + exprs[0] + ' like ' + exprs[1].replace(/^"/, '"%') + ")";
                                            }
    
                                            if (op == 'endWith') {
                                                return "(" + exprs[0] + ' like ' + exprs[1].replace(/"$/, '"%') + ")";
                                            }
    
                                            return "(" + exprs.join(" " + op.replace(/equal/, '=') + " ") + ")";                                            
                                        }
                                    };
    
                                    var newExpr = toExpr(expr);
                                    if (newExpr) {
                                        newExpr += ";";
                                    }
                                    console.log("expr is: ", newExpr);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-17
      • 1970-01-01
      • 2018-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多