0

我正在使用 Spring 4 MVC、JQDataTable 和 Jaskon 库将 JSON 对象从 JSP 发送到 spring 控制器。

在表中,当我单击保存按钮时,我会触发 ajax 调用。这是两个情景。

  1. 我的行可能很旧:在这种情况下,我有部门 ID,并且 hibrnate saveoruupate 命令将更新行。
  2. 我的行可能是新行:在这种情况下,我将没有部门 ID,并且 hibernate saveorupdate 命令将保存新行。注意:两个操作一个控制器。

当我单击更新按钮时,如果行是旧的 json 对象,则"{\"departmentId\":2,\"departmentName\":\"hmkcode\",\"createdBy\":1,\"modifiedBy\":1,\"status\":true}",JSON 对象反序列化成功,如果行是新的 json 对象,则更新命令成功触发, {\"departmentId\":,\"departmentName\":\"hmkcode\",\"createdBy\":1,\"modifiedBy\":1,\"status\":true}",在这种情况下,我的部门 ID 为空,因此 JSON 对象不会被解析并给出错误。

我知道如果它是新行,我必须在 javascript 中处理它以排除部门 ID 标记。应用程序中会有很多大师,所以每次我都必须用 javascript 处理。Javascript增加代码。有没有办法在相应的Java模型中处理。我已将值初始化为零,但仍然给出解析错误。另外:我必须在 Java 模型中添加新的命令属性。如果行是新的或部门 ID 为 0,则命令属性自动设置为“ADD”,如果行是旧的,部门 ID 不为零,则将命令属性设置为“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;
}

@控制器

 @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;
    }

还有一个愚蠢的问题。在模型中我应该使用原始变量还是包装类变量?休眠模型中的相同问题。

如果您知道 JQ Widget 那么:我可以将数据行转换为 JSON。

4

1 回答 1

1

{\"departmentId\":,\"departmentName\":\"hmkcode\",\"createdBy\":1,\"modifiedBy\":1,\"status\":true}",在这种情况下我部门 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);
                    }
                });

在模型中我应该使用原始变量还是包装类变量?休眠模型中的相同问题。

首选 Wrapper 类,在原始变量中不能存储空值。还更改 DTO 类中的以下语句

从:

Integer departmentId=0;

至:

Integer departmentId;

未保存的新部门模型类应具有nullID。

于 2015-03-29T16:49:37.100 回答