使用ajax将模型和字符串传递给Spring MVC

时间:2018-05-23 12:27:07

标签: java html ajax spring jsp

您好我需要使用AJAX将完整模型和一个字符串从html传递给Spring控制器。我使用下面的代码片段,但它不起作用。

var str = $("#resourceManagement").serialize();
        var agreementId = ${agreementId};
        var tempCnltName=$modal.find("input[data-type='cnltName']").val();
        $.ajax({
            type:"POST",
            data: {str, tempCnltName}, 
            url: "${AGREEMENT_BASE_URL}/checkDuplicateConsultantOnline",
            async: false,
            dataType: "json",
            success: function (data, status, xhr) {

                message =  data.errorMsg;
            },
            error: function () {

            }
        });

问题在于,如果我单独传递模型(str)或单独传递字符串(tempCnltName),我可以在控制器中获取它,但我无法将它们放在一起。

我的控制器如下:

@RequestMapping(value = "/app/agreement/checkDuplicateConsultantOnline", method = RequestMethod.POST)
public @ResponseBody AjaxResponse checkDuplicateConsultantOnline(
        @ModelAttribute("consultantBidModel") ConsultantBidModel model,
        @RequestParam(value = "tempCnltName", required = false) String cnltName,
        HttpServletRequest request,
        HttpSession session) throws Exception {

    final Set<String> allCnltNames = new HashSet<>();
    String errMessage = "";
    if (model.getLeadingCnltName() != null) {
        allCnltNames.add(model.getLeadingCnltName().toLowerCase());
    }
    if (model.getJointVentureConsultants() != null) {
        for (ConsultantBidListItem entry : model.getJointVentureConsultants()) {
            if (!allCnltNames.add(entry.getCnltName().toLowerCase())) {
                errMessage = "Each consultant can only appear once.";
            }
        }
    }
    if (model.getSubConsultants() != null) {
        for (ConsultantBidListItem entry : model.getSubConsultants()) {
            if (!allCnltNames.add(entry.getCnltName().toLowerCase())) {
                errMessage = "Each consultant can only appear once.";
            }
        }
    }
    AjaxResponse response = new AjaxResponse();
    if (errMessage != null) {
        response.setSuccess(true);
        response.setResponseObject(errMessage);
        response.setErrorMsg(errMessage);
    }
    return response;
}

3 个答案:

答案 0 :(得分:1)

在服务器端,您已准备好接收模型(使用@ModelAttribute)和其他网址参数(使用@RequestParam

在客户端上,将URL参数附加到URL。假设str是您的模型,tempCnltName是您要提交给服务器的字符串:

$.ajax({
    type:"POST",
    data: str,
    url: "${AGREEMENT_BASE_URL}/checkDuplicateConsultantOnline?tempCnltName=" + tempCnltName,
...

答案 1 :(得分:0)

var strVal = $("#resourceManagement").serialize();
    var agreementId = ${agreementId};
    var tempCnltNameVal=$modal.find("input[data-type='cnltName']").val();
    $.ajax({
        type:"POST",
        data: {str: strVal, tempCnltName: tempCnltNameVal}, 
        url: "${AGREEMENT_BASE_URL}/checkDuplicateConsultantOnline",
        async: false,
        dataType: "json",
        success: function (data, status, xhr) {

            message =  data.errorMsg;
        },
        error: function () {

        }
    });

可能是畸形的json造成了麻烦

答案 2 :(得分:0)

执行上述操作的另一种方法是,将字符串添加到model:

var strVal = "consulName=" + tempCnltName + "&";strVal = strVal + $("#resourceManagement").serialize();

然后,模型可以有一个新参数consulName,我们可以在Controller中获取该值。