У меня есть Spring Hibernate MVC и я пытаюсь реализовать операции CRUD
. Я получил возможность создавать, получать и удалять в некотором роде "RESTful
", но у меня возникли трудности с обновлением.
При попытке обновить объект параметр /id?form, код контроллера для этого:
@RequestMapping(value = "/{id}", params = "form", method = RequestMethod.GET)
public String updateForm(@PathVariable("id") Long id, Model uiModel) {
uiModel.addAttribute("invoice", invoiceServiceHibernate.getInvoice(id));
return "invoices/update";
}
Таким образом, форма JSP для обновления заполняется объектом с использованием идентификатора. Форма обновления JSP выглядит следующим образом:
<c:if test="${!empty invoice}">
<form:form method="PUT" commandName="invoice">
<table>
<tr>
<td>Amount</td>
<td><form:input value="${invoice.amount}" path="amount" /></td>
</tr>
... more labels and fields ...
<tr>
<td colspan="3">
<input type="submit" value="Update Invoice" />
</td>
</tr>
</table>
</form:form>
После отправки вызываемый метод контроллера должен быть:
@RequestMapping(method = RequestMethod.PUT)
public String update(Invoice invoice, BindingResult bindingResult, Model uiModel, HttpServletRequest httpServletRequest) {
if (bindingResult.hasErrors()) {
uiModel.addAttribute("invoice", invoice);
return "invoices/update";
}
uiModel.asMap().clear();
invoiceServiceHibernate.updateInvoice(invoice);
return "redirect:/invoices/";
}
Я пробовал метод гибернации update
, saveOrUpdate
и merge
invoiceServiceHibernate.updateInvoice(invoice)
, и он не работает.
В конечном итоге контроллер создает новый счет вместо обновления старого. Кто-нибудь, почему это так? Я читал эта ссылка, и в ней говорится об использовании @ModelAttribute. Я пробовал это, но это все еще не работает. Использование @ModelAttribute или @Valid ничего не делает. Приложение не создает новый счет, но не обновляет текущий счет.
Какие-либо предложения?
Спасибо!