我想通過刪除鏈接(a href)或刪除按鈕(窗體)刪除頁面上的實體。我使用的刪除按鈕由於鏈接要求一個「GET」,而不是「POST」編程Spring MVC控制器和jsp的HttpDelete
這是JSP代碼打算做的是:
<td><form:form method="DELETE" action="/client/invoices/${invoice.id}"><input type="submit" value="delete"></form:form></td>
生成的HTML是這樣的:
<td><form id="command" action="/client/invoices/9" method="post"><input type="hidden" name="_method" value="DELETE"/><input type="submit" value="delete"></form></td>
所以,我很開心。它有_method表示它是一個DELETE動作。這是我的控制器代碼:
@RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
public String delete(@PathVariable("id") Long id, @RequestParam(value = "page", required = false) Integer page, @RequestParam(value = "size", required = false) Integer size, Model uiModel) {
invoiceServiceHibernate.removeInvoice(id);
return "redirect:/invoices";
}
因此,會發生什麼情況是此方法未被調用。我有另一種方法,它通過POST創建發票並單擊刪除按鈕,而不是創建發票。我的猜測是,控制器將servlet視爲POST請求,並使用第一個處理POST請求的方法,在這種情況下,它將創建新的發票。
我試圖讓這個「RESTful」,所以我想這是/invoice/id
和使用POST, PUT, DELETE, GET
,但我不知道如何在控制器中使用Spring MVC編碼。
我能得到這個通過附加「動詞」,如/invoices/id/delete
和設置控制器
@RequestMapping(value = "/{id}/delete", method = RequestMethod.POST)
注意,RequestMethod.POST但由於地圖值顯式地/id/delete
,但它確實工作不使用映射到/invoices
和/invoices/id
的默認POST。
我希望我很清楚。如果任何人有任何建議或示例代碼(強烈偏好),我將不勝感激。我讀過這些所謂鏈接,引用: Link1 Link2 Link3
現在面臨同樣的問題。我已經添加了過濾器,但是將刪除方法轉換爲POST。你能幫助 – shalu