如何在Spring注释请求参数中进行绑定?

时间:2012-10-03 18:51:45

标签: spring annotations

我有一个控制器正在使用注释进行请求映射和requestParam。

控制器工作正常。但是,当提交带有数组的命令对象时,spring将废弃说明数组索引超出范围。我猜测绑定有问题,但不知道如何修复它。

更具体一点,在eclipse中我会在控制器的开头设置调试器,并且在提交表单时(通过点击输入提交按钮)eclipse调试器将不会触发,我将看到数组索引控制台中绑定错误。

控制器是这样的:

@RequestMapping(value = {"/internal/pcsearch.dex", "/external/pcsearch.dex"},
        method = {RequestMethod.POST, RequestMethod.GET})
public ModelAndView executeProductCatalogSearch(
        HttpServletRequest request,             
        @RequestParam(value = "cat" ,required = false) String cat,          
        @RequestParam(value = "brand" ,required = false) String brand,
        @ModelAttribute("command") ProductCatalogCommand cmd
        ){

[编辑] 而jsp就像:

<form name="pForm" 
id="pForm" 
action="<c:url value="psearch.dex"><c:param name="cat" value="${cat}"/></c:url>" 
method="POST" 
style="display:inline;">
...
...
<c:forEach var="model" items="${models}" varStatus="modelLinkStatus">
        <script>
            var modelImg<c:out value="${modelLinkStatus.index}"/>Src = '<c:out value="${model.altModelImage}"/>';
        </script>
        <spring:bind path="command.models[${modelLinkStatus.index}].modelSkusDisplayed">
        <input type="hidden" name="<c:out value="${status.expression}"/>" id="<c:out value="${status.expression}"/>" value="<c:out value="${status.value}"/>"/>
        </spring:bind>  
<spring:bind path="command.updateCartButton">
                                        <input type="submit" value="<spring:message code="orderEntryMessages.ecatalog.button.addToCart" text="Add to Cart" htmlEscape="yes" />" name="<c:out value="${status.expression}"/>" id="<c:out value="${status.expression}"/>" class="sub_buttons"/>
                                    </spring:bind>

...

并且命令对象将模型数组声明为:

private List<ModelLink> models = new ArrayList<ModelLink>();

其中modelLink是自定义ds。

第一个foreach标签处理模型命令对象,第二部分是我点击的提交按钮。

1 个答案:

答案 0 :(得分:1)

我认为您应该使用AutoPopulatingList作为模型将列表绑定到视图和控制器。例如,请参考link。这可能会解决您的索引问题。