Spring MVC ModelAttribute字段是空的而不是表单输入值
我正在尝试制作一个发布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并将一个空的CardRequestResource添加到ModelMap:
@RequestMapping(value = { "", "/approval" }, method = RequestMethod.GET) public String getApproval(ModelMap map) { map.put("cardRequestResource", new CardRequestResource()); return "cardoffice/approval"; }
我的JSP使用cardRequestResource模型属性构建表单:
Javascript函数进行AJAX调用以填充表单值:
function getCardRequestDetails(cardRequestUrl) { $.ajax({ type : "GET", url : cardRequestUrl, dataType : "json", success : function(response) { loadCardRequestDetails(response); }, error : function(response) {} }); }; function loadCardRequestDetails(cardRequest) { $("#statusId").attr("value", cardRequest.statusId); $("#commentTextarea").val(cardRequest.comments); }
此时,用户可以更新评论文本区域,并且隐藏的输入可以有条件地改变用户在该字段中输入的内容。 然后在提交表单时,我调用以下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为非null,但其中的EVERY SINGLE字段为NULL!
处理程序代码:
@RequestMapping(value = "/approval/submit", method = RequestMethod.POST) public @ResponseBody Map postCardRequest(@ModelAttribute(value = "cardRequestResource") CardRequestResource cardRequestResource) { Map responseMap = new HashMap(); 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; }
所以我想我找到了perp!
这个小伙伴就在POST AJAX电话中:
contentType: "application/json",
我最初是将JSON发送给我的控制器,然后我了解到Spring MVC有那个漂亮的ModelAttribute注释,所以我不必担心在POST期间转换为/从JSON转换。 不幸的是,我没有考虑删除那个contentType行,并且人们会认为它会抛出错误或其中的某些东西仍在那里……显然不是。 绑定中的NULL值和无效调试的小时数…
删除该行后,我开始在CardRequest属性中获取数据而不是NULL!
尝试将以下代码放在aplication-context.xml中。 如果您的表单为encType='multipart/form-data'
这可能是解决方案。