Kendo UI:数据网格更新休息呼叫无法正常工作

时间:2015-09-28 20:16:36

标签: jquery rest spring-mvc datagrid kendo-ui

我正在使用KendoUI,我有一个数据网格,我试图在一行内联更新数据。单击编辑按钮时,将显示UPDATE和CANCEL按钮。当我单击UPDATE按钮时,没有任何反应。我已经使用Chrome开发人员工具调试了这个问题,我提出了一个断点,我认为会出现错误。但是,没有出现与KendoUI Grid数据源的UPDATE功能相关的错误。以下是我的代码片段:

endorsementsTabGridDataSource = new kendo.data.DataSource({
    type: "json",
    transport: {
        read: { url:function (obj){
          return  "/${applicationScope.contextName}/admin/endorsements/api?templateVersionSysId=" + 201442 + "&formCode=" + '7610810' + "&state=" + "FL"
           // url: "/${applicationScope.contextName}/admin/endorsements/api?templateVersionSysId=" +  $("#templateVersionSysId").val() + "&formCode=" + formCode + "&state=" + stateCode
        }
    }},

    update: {
        url: function (obj) {
            return "/${applicationScope.contextName}/admin/endorsements/api"
        },
        type: "POST",
        dataType: "json",
        contentType: "application/json",
        data: function(data){
            return kendo.stringify(data)
        }
    },

    parameterMap: function (options, operation) {
        /* if ((operation === "create" || operation === "update" ) && options) {
            options.state = states.value();
            options.templateVersionSysId = $("#templateVersionSysId").val();
            options.formCode = formCode;
        }

        if (operation !== "read" && options) {
            return  kendo.stringify(options);
        }*/

        return JSON.stringify(options)
    },

    batch: false,
    error: function (xhr, status, error) {
        notification.show('Error occured in Endorsements Tab: ' + xhr.responseText, "error");
    },
    schema: {
        model: {
            id: "customEndorSysId",
            fields: {
                fieldKey: {editable: false, nullable: false},
                name: { editable: true, nullable: false},
                description: {editable: true},
                state: {editable: false, nullable: true},
                templateFldSysId: {editable: false, nullable: false}
            }
        }
    }

});

除了上面提到的jquery之外,rest调用还调用了一个Spring MVC Controller。 Controller类以

开头
@RequestMapping("/admin/endorsements")

调用的方法是以下java代码:

  @ResponseBody
@RequestMapping(value = {"/api"}, method = {RequestMethod.PUT, RequestMethod.POST}, produces = {"application/xml", "application/json"}, headers = {"application/json"})
public ResponseEntity updateEndorsement(@RequestBody String customEndorsementDescription) {

    try {
       // hibernateDao.initAuditFields(customEndorsementDescription, principal);
      //  hibernateDao.saveOrUpdate(customEndorsementDescription);

    } catch (Exception e) {
        e.printStackTrace();
    } finally {

    }
    return new ResponseEntity(customEndorsementDescription, HttpStatus.OK);
}

1 个答案:

答案 0 :(得分:1)

我弄清楚我的问题是什么。问题源于客户端的restful调用结构不良。更新调用位于传输对象之外。请参阅以下更正的代码:

endorsementsTabGridDataSource = new kendo.data.DataSource({
    transport: {
        read: { url: "/${applicationScope.contextName}/admin/endorsements/api?templateVersionSysId=" + 201442 + "&formCode=" + '7610810' + "&state=" + "FL"
            // url: "/${applicationScope.contextName}/admin/endorsements/api?templateVersionSysId=" +  $("#templateVersionSysId").val() + "&formCode=" + formCode + "&state=" + stateCode
        },
        update: {
            url: "/${applicationScope.contextName}/admin/endorsements/api/test",
            type: "POST",
            dataType: "json",
            contentType: "application/json"
        },
        parameterMap: function (options, operation) {
            if (operation !== "read") {
                //console.log("Models: ", options.models);
                options.key = options.fieldKey;
                options.stateText = stateCode;
                return JSON.stringify(options);
            }
            return options;
        }},
    batch: false,
    schema: {
        model: {
            id: "customEndorSysId",
            fields: {
                fieldKey: {editable: false, nullable: false},
                name: { editable: true, nullable: false},
                description: {editable: true}
            }
        }
    }

});

在后端控制器端,我必须进行以下更改:

 @ResponseBody
@RequestMapping(value = {"/api/test"}, method = {RequestMethod.POST}, consumes = {MediaType.APPLICATION_JSON_VALUE}, produces = {MediaType.APPLICATION_JSON_VALUE})
public ResponseEntity updateEndorsement(@RequestBody EndorsementDescription customEndorsementDescription, Principal principal) {

    TrTemplateEndorDesc trTemplateEndorDesc = new TrTemplateEndorDesc();
    try {

        hibernateDao.initAuditFields(customEndorsementDescription, principal);
        trTemplateEndorDesc.setAuditRecCreateApplId(customEndorsementDescription.getAuditRecCreateApplId());
        trTemplateEndorDesc.setAuditRecCreateApplUserId(customEndorsementDescription.getAuditRecCreateApplUserId());
        trTemplateEndorDesc.setAuditRecCreateDbUserId(customEndorsementDescription.getAuditRecUpdtDbUserId());
        //trTemplateEndorDesc.setAuditRecCreateDts(customEndorsementDescription.getAuditRecCreateDts());
        hibernateDao.saveOrUpdate(trTemplateEndorDesc);

    } catch (Exception e) {
        //e.printStackTrace(e.printStackTrace() + e.getCause());
        throw new RuntimeException("Unknown Exception", e.getCause());
    } finally {

    }
    return new ResponseEntity(customEndorsementDescription, HttpStatus.OK);
}