我试图将包含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) {
..
}
请让我知道我在哪里做错了。谢谢!
答案 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或原语