使用Ajax将Map <string,object>发布到Spring Controller

时间:2017-04-07 06:06:40

标签: ajax spring jsp spring-mvc hashmap

我试图将包含Map的模型发布到我的控制器,我尝试了两种方法:

首先,我只是使用常规标记,它使用正确的字符串键到达我的控制器,但地图的对象变为空

<c:forEach items="${productQuote.prodconTm}" var="productQuoteObjTM" varStatus="status">
<tr>
   <td>${productQuoteObjTM.key}</td>
   <td>
   <input value="${productQuoteObjTM.value.qty}" name="prodconTm['${productQuoteObjTM.key}']${productQuoteObjTM.value}" id="inputQuote${status.index}"/>

   </td>
   <td>${productQuoteObjTM.value.totalPrice}</td> 
  </tr>
  </c:forEach> 

此外,我尝试使用表单标记传递Map,如下面的行所示:

但它没有到达我的控制器,我将此表单传递给ajax函数:

 $(document).ready(function() {
$('#quoteForm').submit(
    function(event) {
$.ajax({
    url : $("#quoteForm").attr("action"),
    data : $("#quoteForm").serialize(),
    type : "POST",
  success : function(response) {
    $("#prodConfig").html(response);
},
    error : function(xhr, status, error) {
    alert("ERROR:"+xhr.responseText);
}});
return false;
    });
});

这是期待模型的控制器:

    @RequestMapping(value="/saveConfig",method = RequestMethod.POST)
    public ModelAndView currentquote(@ModelAttribute("productQuote") ProductQuoteDTO productQuote) {
    ..
    }

请让我知道我在哪里做错了。谢谢!

1 个答案:

答案 0 :(得分:0)

您应该使用JSP Forms而不是原始HTML表单,这将使您的生活变得更加简单 我想productQuote.prodconTm是你的地图:

<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %>

<form:form id="quoteForm" commandName="productQuote">
    <c:forEach items="${productQuote.prodconTm}" var="entry">
        <tr>
            <td>${entry.key}</td>
            <td>
                <form:input path="prodconTm['${entry.key}'].qty" />
            </td>
            <td>${entry.value.totalPrice}</td> 
        </tr>
    </c:forEach>
</form:form>

我不确定路径中的prodconTm['${entry.key}'].qty是否有效 否则,您可能必须使Map值的DTO适应简单的String或原语