我正在使用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);
}
答案 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);
}