将jQuery表单提交给Spring控制器

时间:2014-02-12 05:02:49

标签: jquery spring html-form-post

我正在尝试使用jQuery表单插件(http://malsup.com/jquery/form/

提交表单

我的js看起来像这样:

var options = { 
        success: callback, 
        type: "POST",
        dataType: 'multipart/form-data',
        url: url   
};
$('#myForm').ajaxForm(options);
$('#myForm').submit();

我的控制器方法如下所示:

public ModelAndView processForm(MultipartHttpServletRequest request) throws Exception 

我收到此错误:

(org.springframework.web.multipart.MultipartHttpServletRequest) throws
 java.lang.Exception]; nested exception is java.lang.IllegalStateException: Current 
request is not of type [org.springframework.web.multipart.MultipartHttpServletRequest]:

我做错了什么?

2 个答案:

答案 0 :(得分:1)

您可以将控制器更改为处理多部分和非多部分

@RequestMapping(value="/urRequestMappingURL", method = RequestMethod.POST) 
public @ResponseBody Map<String, Object> controllingMethod(HttpServletRequest request) {
    if (request instanceof MultipartHttpServletRequest) {
        // process the uploaded file
    }
    else {
        // other logic
    }
}

答案 1 :(得分:0)

这是一系列事情:首先,我需要添加

enctype="multipart/form-data"

到表单标记。

也因为表单标签跨越了多个div,jQuery表单插件没有获取其他输入。所以我这样做了:

<form id="myForm" enctype="multipart/form-data">
  <input type="file" name="file"/>
</form>

然后我的js将使用常规jQuery添加其他输入字段,然后再提交:

    var options = { 
        success: callback, 
        type: "POST",
        dataType: 'JSON',
        url: url,
        beforeSerialize: function(form, options) {
            options.data = {
                caseNo: $("#caseNo").val(),
                inspectionID: $("#inspectionID").val()
            };
        },
};
$('#myForm').ajaxForm(options);
$('#myForm').submit();

希望这有助于某人