Я пытаюсь редактировать продукт. Объект поддержки формы довольно прост:
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: скрытый тег? Это ошибка или ожидаемое поведение. Кажется очень странным для меня, просто хотел выбросить это и посмотреть, могу ли я сделать это неправильно, или это может помочь кому-то еще.
Спасибо.