Вы можете использовать «родной» механизм привязки Spring.
Пример контроллера:
@Controller
public class OrderController {
@ModelAttribute("purchase")
public Purchase getPurchase(@RequestParam("purchase-id") int purchaseId) {
// create purchase object
}
@RequestMapping(...)
public void processPosting(@ModelAttribute("purchase") Purchase purchase) {
// process order
}
}
Пример HTML:
<spring:form commandName="purchase">
<table>
<c:forEach var="item" items="${purchase.items}" varStatus="status">
<spring:nestedPath path="purchase.items[${status.index}]">
<tr>
<td>ID: 8 <form:hidden path="id" />
<td>Quantity: 8 <form:text path="quantity" />
</tr>
</spring:nestedPath>
</c:forEach>
</table>
<input type="submit" />
</spring:form>
Метод getPurchase()
будетВызывается при каждом запросе и предоставляет покупку по умолчанию, которая затем будет заполнена значениями из запроса.Этот метод принимает обычные аннотации, такие как @RequestParam
, которые помогут вам создать правильный объект покупки.
Покупка будет доступна в виде атрибута запроса с именем purchase
.
.Форма выполняет итерацию по всем элементам покупки и создает вложенный путь, используя индексный доступ к списку приобретенных элементов, поэтому убедитесь, что порядок элементов всегда одинаков!
Параметры запроса будут названы как purchase.items[0].quantity
для первого пункта и так далее.Spring свяжет эти имена параметров с атрибутом модели purchase
, свойством items
, индексом 0, свойством quantity
, как обычный путь к свойству.
Надеюсь, это поможет вам в вашей задаче.