forms - Spring MVC ModelAttribute 字段为 Null 而不是表单输入值

标签 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 requestDate;
    private String expectedDate;
    private String comments;
    private Long statusId;
    private PersonResource person;

    //Getters and Setters
}

在我的 Controller 中,我首先加载 JSP 并向 ModelMap 添加一个空的 CardRequestResource:

@RequestMapping(value = { "", "/approval" }, method = RequestMethod.GET)
public String getApproval(ModelMap map) {
    map.put("cardRequestResource", new CardRequestResource());       
    return "cardoffice/approval";
}

我的 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 函数进行 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 或用户加载的数据。但是,当我到达 Controller 中处理帖子的处理程序时,CardRequestResource 不为空,但其中的每个字段都是 NULL!

处理程序代码:

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

最佳答案

所以我想我找到了罪犯!

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

contentType: "application/json",

我最初将 JSON 发送到我的 Controller ,然后我了解到 Spring MVC 有那个漂亮的 ModelAttribute 注释,所以我不必担心在 POST 期间与 JSON 之间的转换。不幸的是,我没有想到要删除该 contentType 行,并且人们会认为它会抛出错误或仍然存在的内容......显然不是。只是绑定(bind)中的 NULL 值和数小时无结果的调试...

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

关于forms - Spring MVC ModelAttribute 字段为 Null 而不是表单输入值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18004564/

相关文章:

HTML - 嵌套表单解决方法?

css - rails : How to style form submit button

java - Spring Rest 返回带有特定 http 响应代码的 JSON 响应

javascript - Jquery UI Slider 多重启动

java - 无法将 Spring MVC 应用程序连接到 AmazonMQ Broker

java - spring-projects/spring-data-commons 中的 PageableHandlerMethodArgumentResolver

forms - 具有相同名称的多个复选框的必需属性?

javascript - 如何在提交表单时关闭模态弹出窗口?

javascript - 使用javascript从文件夹中获取图像大小

javascript - angularjs fullcalendar eventclick范围