1

我们正在使用ExtJS 4.2.1Spring MVC / Data-RestGET无论如何,data-rest 将在成功请求时返回以下结构:

{
    content: [ ... objects .... ],
    links: [ ... list of rel links ... ],
    page: {
        size: 25,
        totalElements: 4,
        totalPages: 1,
        number: 1
    }
}

所以,在我的代理中,我totalPropertypage.totalElements. 效果很好。

但是,当我们发送PUT请求时,自然(我相信也是正确的)响应是发送204 NO CONTENT. 现在,如果我们totalProperty设置为total(not page.xxx) 之类的,那就没问题了。但是 ExtJS 试图解析page.totalElements并返回一个异常,因为page它是空的。

那么如何告诉 ExtJS 忽略 PUT 请求中的 totalProperty 呢?

4

2 回答 2

0

哈。看起来我找到了解决方法。不确定我是否喜欢它,但它有效。我改变了我的控制器:

return new ResponseEntity<>("OK", HttpStatus.OK);

和以前一样,它是:

return new ResponseEntity(HttpStatus.OK);

ExtJS 似乎并不介意。奇怪的。

于 2013-08-29T13:37:47.213 回答
0

@cbmeeks,我在 Ext.JS 4.1.3中遇到了类似的问题,我在此处发布了修复程序。

/**  
 * Fix for Json reader when the HTTP response is Status Code: 204 No Content and  
 * at least one of the pair root/totalProperty is not a direct property of the returned json  
 * http://www.sencha.com/forum/showthread.php?127585  
 * @author rgralhoz  
 */  
Ext.data.reader.Json.override({
    createAccessor: (function () {
        var re = /[\[\.]/;

        return function (expr) {
            if (Ext.isEmpty(expr)) {
                return Ext.emptyFn;
            }
            if (Ext.isFunction(expr)) {
                return expr;
            }
            if (this.useSimpleAccessors !== true) {
                var i = String(expr).search(re);
                if (i >= 0) {
                    return Ext.functionFactory('obj',

                        'return obj' + (i > 0 ?

                            '.hasOwnProperty("' +
                                expr.substring(0, i) +
                                '")? obj.' + expr + ' : null' :

                            expr));
                }
            }
            return function (obj) {
                return obj[expr];
            };
        };
    }())
});

免责声明:

请将此代码添加到fixes.js项目中的文件中,以覆盖 Ext.Js 的功能。请注意:

  1. 4.2.1 的修复可能相同或相似
  2. 一旦你覆盖了他们的功能,当你升级 Ext.Js 时,确保他们没有改变它,否则你会丢失他们的代码更新。
于 2013-10-31T21:22:23.077 回答