как сделать привязку в аннотированном параметре запроса Spring?

у меня есть контроллер, который использует аннотацию для сопоставления запросов и 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 обрабатывает объект команды модели, а вторая часть - это кнопка отправки, на которую я нажал.


person Richard Hsu    schedule 03.10.2012    source источник
comment
можете ли вы опубликовать класс ProductCatalogCommand и может быть вашей формой jsp.   -  person Jigar Parekh    schedule 04.10.2012


Ответы (1)


я думаю, вы должны использовать AutoPopulatingList в качестве моделей для привязки списка к представлению и контроллеру. например, перейдите по ссылке. Это может решить вашу проблему с index.

person Jigar Parekh    schedule 04.10.2012