使用JSON数据在Spring MCV中上载文件

时间:2017-03-24 13:51:09

标签: jquery json spring-mvc jquery-file-upload apache-commons-fileupload

请帮我完成我的代码。

我正在使用paramquries网格。在这个网格中,我每行都有文件眉选项。 当我的acceptChanges方法调用时,我从网格获取数据,我作为JSON传递。但我的文件将如何传输到服务器。

var arrayData="";

$(function () {  
//called when accept changes button is clicked.
function acceptChanges() {
    //attempt to save editing cell.
    //debugger;
    if (grid.saveEditCell() === false) {
        return false;
    }

    var isDirty = grid.isDirty();
    if (isDirty) {
        //validate the new added rows.                
        var addList = grid.getChanges().addList;
        for (var i = 0; i < addList.length; i++) {
            var rowData = addList[i];
            var isValid = grid.isValid({ "rowData": rowData }).valid;
            if (!isValid) {
                return;
            }
        }
        var changes = grid.getChanges({ format: "byVal" });
        //post changes to server 
        $.ajax({
            dataType: "json",
            type: "POST",
            async: true,
            beforeSend: function (jqXHR, settings) {
                grid.showLoading();
            },
            url: "/ExpenseManagement/saveExpense", //for ASP.NET, java                                                
            data: { list: JSON.stringify(changes) },
            processData : false,
            contentType : false, 
            success: function (changes) {
                //debugger;
                grid.commit({ type: 'add', rows: changes.addList });
                grid.commit({ type: 'update', rows: changes.updateList });
                grid.commit({ type: 'delete', rows: changes.deleteList });

            },
            complete: function () {
                grid.hideLoading();
            }
        });
    }
}
var obj = {
    width: 700,
    height: 400,
    wrap: false,
    hwrap: false,
    resizable: true,
    rowBorders: false,
    numberCell: { show: false },
    track: true, //to turn on the track changes.
    flexHeight: true,
    toolbar: {
        items: [
            { type: 'button', icon: 'ui-icon-plus', label: 'New Product', listeners: [
                { "click": function (evt, ui) {
                    //append empty row at the end.                            
                    var rowData = { UnitPrice: 0, Discontinued: false }; //empty row
                    var rowIndx = $grid.pqGrid("addRow", { rowData: rowData });
                    $grid.pqGrid("goToPage", { rowIndx: rowIndx });
                    $grid.pqGrid("editFirstCellInRow", { rowIndx: rowIndx });
                }
                }
            ]
            },
            { type: 'button', icon: 'ui-icon-disk', label: 'Accept Changes', style: 'margin:0px 5px;', listeners: [
                { "click": function (evt, ui) {
                    acceptChanges();
                }
                }
            ]
            },
            { type: 'button', icon: 'ui-icon-cancel', label: 'Reject Changes', listeners: [
                { "click": function (evt, ui) {
                    $grid.pqGrid("rollback");
                }
                }
            ]
            },
            { type: 'separator' },
            { type: 'button', icon: 'ui-icon-cart', label: 'Get Changes', style: 'margin:0px 5px;', listeners: [
                { "click": function (evt, ui) {
                    var changes = $grid.pqGrid("getChanges");
                    try {
                        console.log(changes);
                    }
                    catch (ex) { }
                    alert("Please see the log of changes in your browser console.");
                }
                }
            ]
            }
        ]
    },
    scrollModel: {
        autoFit: true
    },
    selectionModel: {
        type: ''
    },
    cellSave : function (evt, ui) {

    },
    render: function (evt, ui) {

    },
    hoverMode: 'cell',
    editModel: {
        saveKey: $.ui.keyCode.ENTER
    },
    title: "<b>Expense Details</b>",

    colModel: [
        { title: "Expense ID", dataType: "integer", dataIndx: "expenseId", editable: false },
        { title: "Date", width: "100", dataIndx: "date",
            editor: {
                type: 'textbox',
                init: dateEditor
            },
            render: function (ui) {
                var cellData = ui.cellData;
                if (cellData) {
                    return $.datepicker.formatDate('yy-mm-dd', new Date(cellData));
                }
                else {
                    return "";
                }
            },
            validations: [
                { type: 'regexp', value: '^[0-9]{2}/[0-9]{2}/[0-9]{4}$', msg: 'Not in mm/dd/yyyy format' }
            ]
        },
        { title: "Location From", width: 140, dataType: "string", align: "right", dataIndx: "fromLocation"},
        { title: "Location To", width: 100, dataType: "String", align: "right", dataIndx: "toLocation"},
        { title: "Description", width: 100, dataType: "String", align: "right", dataIndx: "description"},
        { title: "Amount", width: 100, dataType: "float", align: "right", dataIndx: "amount",
            validations: [{ type: 'gt', value: 0.5, msg: "should be > 0.5"}],
            render: function (ui) {                        
                var cellData = ui.cellData;
                if (cellData != null) {
                    return "&#8377;" + parseFloat(ui.cellData).toFixed(2);
                }
                else {
                    return "";
                }
            }
        },

        { title: "Receipt/Document", editable: false, dataIndx: "receipt", minWidth: 200, sortable: false, 
            render: function (ui) {
                if(ui.cellData != -1){
                    return "<input type='file' name='receipt'/>";
                }
                else return "";
            }
        },
        { title: "", editable: false, minWidth: 83, dataIndx: "delButton", sortable: false, render: function (ui) {
            if(ui.cellData != -1)
                return "<button type='button' class='delete_btn'>Delete</button>";
            else return "";
        }
        }
    ],
    dataModel: {                
        dataType: "JSON",
        location: "remote",
        recIndx: "ProductID",
        url: "/pro/products/get", //for ASP.NET
        //url: "/pro/products.php", //for PHP
        getData: function (response) {
            return { data: response.data };
        }
    },
    //save the cell when cell loses focus.
    quitEditMode: function (evt, ui) {                
        if (evt.keyCode != $.ui.keyCode.ESCAPE) {
            $grid.pqGrid("saveEditCell");
        }
    },
    refresh: function () {


        $("#grid_editing").find("button.delete_btn").button({ icons: { primary: 'ui-icon-scissors'} })
        .unbind("click")
        .bind("click", function (evt) {
            var $tr = $(this).closest("tr");
            var obj = $grid.pqGrid("getRowIndx", { $tr: $tr });
            var rowIndx = obj.rowIndx;
            $grid.pqGrid("addClass", { rowIndx: rowIndx, cls: 'pq-row-delete' });

            var ans = window.confirm("Are you sure to delete row No " + (rowIndx + 1) + "?");

            if (ans) {
                $grid.pqGrid("deleteRow", { rowIndx: rowIndx, effect: true, complete: function () {
                    $grid.pqGrid("removeClass", { rowIndx: rowIndx, cls: 'pq-row-delete' });
                }
                });
            }
            else {
                $grid.pqGrid("removeClass", { rowIndx: rowIndx, cls: 'pq-row-delete' });
            }
        });
    },
    cellBeforeSave: function (evt, ui) {
        var isValid = grid.isValid(ui);
        if (!isValid.valid) {
            evt.preventDefault();
            return false;
        }
    }
};
var $grid = $("#grid_editing").pqGrid(obj);

//get instance of the grid.
    var grid = $grid.data("paramqueryPqGrid");
});

控制器:

@RequestMapping(value="/saveExpense",method=RequestMethod.POST,consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE, 
        produces = {MediaType.APPLICATION_ATOM_XML_VALUE, MediaType.APPLICATION_JSON_VALUE})
public String saveExpense(@RequestParam String list, @RequestPart("file") MultipartFile file) throws JsonGenerationException, JsonMappingException, IOException{

    System.out.println(list);
    return "hi";
}

0 个答案:

没有答案