Коллекция пружинных переплетов для формы со скрытым полем - PullRequest
4 голосов
/ 08 декабря 2011

Я пытаюсь редактировать продукт. Объект поддержки формы довольно прост:

private Integer           productId;
private String            name;
private Double            price;
private List<Integer>     relatedProductList;  //list of related product ids

...//getters/setter

Часть, вызывающая проблему, связана с ProductList. Я пытаюсь поместить список в сообщение, чтобы отобразить его на странице последующего квеста. Я попытался использовать скрытое поле, как это в моем JSP:

<form:hidden path="relatedProductList"/>

Скрытое поле красиво отображается в HTML, как и следовало ожидать:

<input id="relatedProductList" name="relatedProductList" type="hidden" value="[200408, 200417]"/>

Почтовые данные выглядят хорошо, используя firebug:

relatedProductList    [200408, 200417]

Но в моем контроллере объект поддержки формы имеет нулевой список продуктов ??

@RequestMapping(method = RequestMethod.POST, value = "/edit.do", params = "editRelatedProducts")
public ModelAndView editRelatedProducts(@Valid @ModelAttribute ProductForm form, BindingResult result) {
    if (result.hasErrors()) {    
        ModelAndView view = new ModelAndView(VIEW_PRODUCT);
        setupCreateReferenceData(view , form);
        return view ;
    }

    ModelAndView editView = new ModelAndView(VIEW_EDIT_RELATED);

    //method to lookup the product ids and place product objects on model
    editView.addObject("relatedProducts",populateProductList(form.getRelatedProductList()));

    return editView ;
}

** Но form.getRelatedProductList равен нулю!

Я могу обойти проблему, используя скрытое поле и установив значение в jsp, в цикле, который показывает связанные продукты:

        <div>
            <table id="relProductTbl" class="tablesorter">
              <thead>
                 ...
              </thead>
              <tbody>
                  <c:forEach var="prod" items="${relatedProducts}" varStatus="row">
                        <tr>
                            <input id="relatedProductList" name="relatedProductList" type="hidden" value="${prod.productId}"/>
                             ...
                        </tr>
                  </c:forEach>
              </tbody>
            </table>
        </div>

Это приводит к следующему html:

<input id="relatedProductList" name="relatedProductList" type="hidden" value="200408"/>
...
<input id="relatedProductList" name="relatedProductList" type="hidden" value="200417"/>

Который выглядит нормально и выдает следующий пост:

relatedProductList    200408
relatedProductList    200417

И вдруг form.getRelatedProductList () теперь заполняется правильно.

Кто-нибудь знает, почему postL contractList [200408, 200417] не привязывается к форме правильно, когда используется форма springs: скрытый тег? Это ошибка или ожидаемое поведение. Кажется очень странным для меня, просто хотел выбросить это и посмотреть, могу ли я сделать это неправильно, или это может помочь кому-то еще.

Спасибо.

...