1

と を使用ExtJS 4.2.1してSpring MVC / Data-Restいます。GETいずれにせよ、リクエストが成功すると、data-rest は次の構造を返します。

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

したがって、私のプロキシでは、 を に設定しtotalPropertyましたpage.totalElements。よく働く。

ただし、PUTリクエストを送信するときの自然な (そして正しいと思います) 応答は、204 NO CONTENT. ここで、(not ) のtotalPropertyような値に設定されていれば問題ありません。しかし、ExtJS は null であるため、解析しようとして例外を返します。totalpage.xxxpage.totalElementspage

では、PUT リクエストで totalProperty を無視するように ExtJS に指示するにはどうすればよいでしょうか?

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.J をアップグレードするときに、変更していないことを確認してください。そうしないと、コードの更新が失われます。
于 2013-10-31T21:22:23.077 に答える