0

データを「POST」しようとしましたが、実行中にエラー 400 が発生しました。「UPDATE」データにも同じ問題があります。この問題を解決する方法がわかりません。

これは私の jqgrid コードです: $(function() {

    $.extend($.jgrid.defaults, {
        datatype: 'json',
        jsonReader : {
            repeatitems:false,
            total: function(result) {
                //Total number of pages
                return Math.ceil(result.total / result.max);
            },
            records: function(result) {
                //Total number of records
                return result.total;
            }
        },
        prmNames: {
            rows: 'max', 
            search: null
        },
        height: 'auto',
        viewrecords: true,
        rowList: [10, 20, 50, 100],
        altRows: true,
        loadError: function(xhr, status, error) {
            alert(error);
        }
    });

    $.extend($.jgrid.edit, {
        closeAfterEdit: true,
        closeAfterAdd: true,
        ajaxEditOptions: {
            contentType: "application/json"
        },
        mtype: 'PUT',
        serializeEditData: function(data) {
            delete data.oper;
            return JSON.stringify(data);
        }
    });
    $.extend($.jgrid.del, {
        mtype: 'DELETE',
        serializeDelData: function() {
            return "";
        }
    });

    var editOptions = {
        onclickSubmit: function(params, postdata) {
            params.url = URL + '/' + postdata.id;
        }
    };
    var addOptions = {
        mtype: "POST"
    };
    var delOptions = {
        onclickSubmit: function(params, postdata) {
            params.url = URL + '/' + postdata;
        }
    };

    var URL = 'rest/poll';
    var options = {
        url: URL,
        editurl: URL,
        colModel:[
        {
            name:'id', 
            label: 'ID',
            formatter:'integer',
            width: 40,
            editable: true,
            editoptions: {
                disabled: true, 
                size:5
            }
        },
        {
            name: 'categories.name', 
            index: 'categories', 
            label: 'Category',
            editable: true, 
            edittype: "select",
            viewrecords:true,

            editoptions: {
                dataUrl:"rest/category/list.do", 
                buildSelect: function (list) 
                { 
                    var data = jQuery.parseJSON(list); 
                    var s = '<select>'; 
                    for (var i = 0; i < data.locationList.length; i++) {
                        s += '<option value="' + data.locationList[i] + '">' + data.locationList[i].name + '</option>'; 
                    } 
                    return s + "</select>"; 
                } 
            } 
        },
        {
            name:'name',
            label: 'Name',
            width: 300,
            editable: true,
            editrules: {
                required: true
            }
        },

        {
            name: 'MyLink',
            formatter: myLinkFormatter
        }

        ],
        caption: "Polls",
        pager : '#pager',
        height: 'auto',
        ondblClickRow: function(id) {
            jQuery(this).jqGrid('editGridRow', id, editOptions);
        }
    };

    $("#grid")
    .jqGrid(options)
    .navGrid('#pager',
    {}, //options
        editOptions,
        addOptions,
        delOptions,
        {} // search options
        );

});

function myLinkFormatter (cellvalue, options, rowObjcet) {
    return '<a href = "/Polls_V2/options?categoryId=' + options.rowId + '">Answers</a>';
}

そして、これは私のコントローラーコードです:

 @RequestMapping(method = RequestMethod.POST)
    public ResponseEntity<String> createCategory(HttpServletRequest request, @RequestBody Polls polls) {
        pollsService.add(polls);

        URI uri = new UriTemplate("{requestUrl}/{username}").expand(request.getRequestURL().toString(), polls.getId());
        final HttpHeaders headers = new HttpHeaders();
        headers.put("Location", Collections.singletonList(uri.toASCIIString()));
        return new ResponseEntity<String>(headers, HttpStatus.CREATED);
    }
4

1 に答える 1

0

私は Java にあまり詳しくありませんが、firebugfiddler web debuggerなどのアプリを実行し、ajax リクエストを検査して、正しく構築されているかどうかを確認します (エラー 400 はリクエストに関連していないため)。

私は過去に、私が作成したこの本当に古いjsfiddleのようなJqGridの追加/編集/削除呼び出しを構築しました...しかし、それは私にとってはうまくいきました。

DataGrid.navGrid('#pager', { edit: true, add: true, del: true, search: true },
           {                   
                url: this.urlEdit, ...
            },
            {                   
                url: this.urlAdd,  ...
            },
            {                   
                url: this.urlDelete, ...
            }
        );

..また、あなたが提供したコントローラーコードは、グリッドのデータ取得呼び出しのコードのようには見えません...私が推測しているあなたの質問には関係ありません。(たとえば、「RequestMethod.GET」アクションへの投稿を実行しようとしています)。POST を処理するメソッドのコードを教えてください。

于 2013-01-08T08:28:51.547 に答える