我使用Spring 4 MVC,JQDataTable和Jaskon库将JSON对象从JSP发送到spring控制器。
在表格中,当我点击保存按钮时,我会激活ajax呼叫。这是两个senario。
当我点击更新按钮时,
如果row是旧的json对象是"{\"departmentId\":2,\"departmentName\":\"hmkcode\",\"createdBy\":1,\"modifiedBy\":1,\"status\":true}",
JSON对象反序列化成功并且update命令成功获取
如果row是新的json对象是
{\"departmentId\":,\"departmentName\":\"hmkcode\",\"createdBy\":1,\"modifiedBy\":1,\"status\":true}",
在这种情况下我的部门ID是空的,因此JSON对象不会被解析并给出错误。
我知道我必须在javascript中处理它以排除部门ID标记(如果它是新行)。 应用程序中会有很多主人,所以每次我必须处理javascript。 Javascript增加代码。 有没有办法在相应的Java模型中处理。我将值初始化为零仍然给出了解析错误。 另外:我必须在Java模型中添加新的命令属性。如果row为new或department id为0则自动将command属性设置为“ADD”,如果row为old,则department id不为零,则将command属性设置为“UPADATE”。
updateRow: function (rowID, rowData, commit) {
var jsonToBeSend="{\"departmentId\":"+rowData.departmentId+",\"departmentName\":\""+rowData.departmentName+"\",\"createdBy\":1,\"modifiedBy\":1,\"status\":"+rowData.status+"}";
alert(dept)
$.ajax({
url: "/BusinessReimbursment/addDepartment",
type: 'POST',
dataType: 'json',
data: jsonToBeSend,
contentType: 'application/json',
mimeType: 'application/json',
success: function(data) {
alert(data.success + " " + data.message);
commit(true);
},
error:function(data) {
// alert("error: "+data);
// $("#dataTable").jqxDataTable('deleteRow', rowID);
}
});
public class DepartmentDTO implements Serializable{
private static final long serialVersionUID = 1L;
Integer departmentId=0;
@NotNull
@Size(min=3,max=30,message="Department lenght should be between 3 to 30 character")
String departmentName;
Integer createdBy;
Integer modifiedBy;
@NotNull
Boolean status;
}
@Controller
@RequestMapping(value="/addDepartment", method=RequestMethod.POST)
public @ResponseBody AjaxResponse addDepartment(@RequestBody final DepartmentDTO departmentDTO){
AjaxResponse response=new AjaxResponse();
Department department=DepartmentConvertor.setDepartmentDTOToDepartment(departmentDTO);
if(Validation.validateForNullObject(department)){
departmentService.addDepartment(department);
}
response.setSuccess(Boolean.TRUE);
response.setMessage("Record save Successfully");
return response;
}
另一个愚蠢的问题。在模型中我应该使用原始变量还是包装类变量? hibernate模型中的同样问题。
如果你知道JQ Widget那么:我可以将datarow转换为JSON。
答案 0 :(得分:1)
{\" DepartmentID的\":\" DEPARTMENTNAME \":\" hmkcode \" \" createdBy \&# 34;:1,\" modifiedBy \":1,\"状态\":真}&#34 ;, 在这种情况下,我的部门ID是空的,所以JSON对象不会得到 解析并给出错误。
由于departmentId
没有值,因此在这种情况下设置null
或''
空值以成功解析JSON。
updateRow: function (rowID, rowData, commit) {
var jsonToBeSend = new Object();
if (rowData.departmentId != "" || rowData.departmentId != null){
jsonToBeSend["departmentId"] = rowData.departmentId;
}
jsonToBeSend["departmentName"] = rowData.departmentName;
jsonToBeSend["createdBy"] = 1;
jsonToBeSend["modifiedBy"] = 1;
jsonToBeSend["status"] = rowData.status;
$.ajax({
url: "/BusinessReimbursment/addDepartment",
type: 'POST',
data: JSON.stringify(jsonToBeSend),
beforeSend: function(xhr) {
xhr.setRequestHeader("Accept", "application/json");
xhr.setRequestHeader("Content-Type", "application/json");
}
success: function(data) {
alert(data.success + " " + data.message);
commit(true);
},
error:function(data) {
// alert("error: "+data);
// $("#dataTable").jqxDataTable('deleteRow', rowID);
}
});
在模型中我应该使用原始变量或包装类 变量?? hibernate模型中的同样问题。
首选Wrapper类,在原始变量中不能存储空值。也改变DTO课程中的以下陈述
从:
Integer departmentId=0;
为:
Integer departmentId;
未保存的新部门模型类应具有null
ID。