Forms SpringMVCModelAttribute字段为Null,而不是表单输入值

Forms SpringMVCModelAttribute字段为Null,而不是表单输入值,forms,jquery,spring-mvc,null,modelattribute,Forms,Jquery,Spring Mvc,Null,Modelattribute,我正在尝试制作一个表单,用于发布CardRequestResource: public class CardRequestResource extends ResourceSupport{ private Long cardRequestId; private String deliveryMethod; private String address; private boolean isHomeDelivery; private String reque

我正在尝试制作一个表单,用于发布CardRequestResource:

public class CardRequestResource extends ResourceSupport{
    private Long cardRequestId;
    private String deliveryMethod;
    private String address;
    private boolean isHomeDelivery;
    private String requestDate;
    private String expectedDate;
    private String comments;
    private Long statusId;
    private PersonResource person;

    //Getters and Setters
}
在我的控制器中,我首先加载JSP并向ModelMap添加一个空的CardRequestResource:

@RequestMapping(value = { "", "/approval" }, method = RequestMethod.GET)
public String getApproval(ModelMap map) {
    map.put("cardRequestResource", new CardRequestResource());       
    return "cardoffice/approval";
}
My JSP使用cardRequestResource模型属性构建表单:

<form:form id="detailForm" name="detailForm" modelAttribute="cardRequestResource">
    <form:input path="statusId" type="hidden" id="statusId" name="statusId" />
    <form:textarea path="comments" name="comments" id="commentTextarea" rows="7" cols="81" style="font-style: normal;"/>
</form:form>
此时,用户可能会更新注释文本区域,隐藏的输入可能会根据用户在字段中输入的内容有条件地更改。然后在提交表单时,我调用以下Javascript函数:

function postCardRequest(url) {
    var serialized = $("#detailForm").serialize();
    alert(serialized);
    $.ajax({
        type: "POST",
        url: url,
        data: serialized,
        contentType: "application/json",
        dataType: "json"                
    });
}
该警报显示字段正确填充了最初由AJAX/Javascript或用户加载的数据。但是,当我到达处理post的控制器中的处理程序时,CardRequestResource是非空的,但其中的每个字段都是空的

处理程序代码:

@RequestMapping(value = "/approval/submit", method = RequestMethod.POST)
public @ResponseBody Map<String, Object> postCardRequest(@ModelAttribute(value = "cardRequestResource") CardRequestResource cardRequestResource) {
    Map<String, Object> responseMap = new HashMap<String, Object>();
    final String success = "success";
    Boolean isSuccessful = Boolean.FALSE;

    if(cardRequestResource != null){
        isSuccessful = Boolean.TRUE;
    }
    //TODO

    System.out.println("Status: " + cardRequestResource.getStatusId() + ", Comments: " + cardRequestResource.getComments());

    responseMap.put(success, isSuccessful);
    return responseMap;
}
@RequestMapping(value=“/approval/submit”,method=RequestMethod.POST)
public@responseBy映射请求(@ModelAttribute(value=“cardRequestResource”)cardRequestResource cardRequestResource){
Map responseMap=newhashmap();
最终字符串success=“success”;
Boolean isSuccessful=Boolean.FALSE;
if(cardRequestResource!=null){
isSuccessful=Boolean.TRUE;
}
//待办事项
System.out.println(“状态:+cardRequestResource.getStatusId()+”,注释:+cardRequestResource.getComments());
响应映射put(成功,发布成功);
返回响应映射;
}

所以我想我找到了罪犯

在POST AJAX调用中,这个小家伙:

contentType: "application/json",
我最初是将JSON发送到我的控制器,然后我了解到SpringMVC有一个漂亮的ModelAttribute注释,所以我不必在我的帖子中担心JSON的转换。不幸的是,我没有想到要删除contentType行,人们会认为它会抛出一个错误或其他东西,它仍然在那里。。。显然不是。绑定中只有空值,调试数小时都没有结果


删除该行后,我开始在CardRequest属性中获取数据,而不是null

尝试将以下代码放入aplication-context.xml中。如果您正在使用表单
encType='multipart/form data'
,这可能是解决方案

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="10000000"/>
</bean>

这挽救了我的一天!谢谢
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="10000000"/>
</bean>