2011-10-26 26 views
6

Tôi đang cố xóa một thực thể trên một trang thông qua liên kết xóa (a href) hoặc nút xóa (biểu mẫu). Tôi đang sử dụng nút xóa từ một liên kết đòi hỏi một "GET" thay vì một "POST"Lập trình Bộ điều khiển MVC Spring và jsp cho HttpDelete

Đây là mã JSP mà có ý định về thực hiện điều đó:

<td><form:form method="DELETE" action="/client/invoices/${invoice.id}"><input type="submit" value="delete"></form:form></td> 

Các html kết quả là thế này:

<td><form id="command" action="/client/invoices/9" method="post"><input type="hidden" name="_method" value="DELETE"/><input type="submit" value="delete"></form></td> 

Vì vậy, tôi rất vui. Nó có _method chỉ ra rằng nó là một hành động DELETE. Đây là mã điều khiển của tôi:

@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"; 
} 

Vì vậy, điều gì xảy ra là phương pháp này không được gọi. Tôi có một phương pháp khác thực hiện POST để tạo hóa đơn và nhấp vào nút xóa thay vì tạo hóa đơn. Tôi đoán là bộ điều khiển xem xét servlet như một yêu cầu POST và sử dụng phương thức đầu tiên xử lý yêu cầu POST trong trường hợp này là tạo một hóa đơn mới.

Tôi cố gắng thực hiện điều này "RESTful" vì vậy tôi muốn điều này là /invoice/id và sử dụng POST, PUT, DELETE, GET nhưng tôi không chắc chắn làm thế nào để mã đó trong bộ điều khiển bằng cách sử dụng Spring MVC.

tôi có thể có được điều này để làm việc bằng cách thêm "động từ" như /invoices/id/delete và thiết lập bộ điều khiển như

@RequestMapping(value = "/{id}/delete", method = RequestMethod.POST) 

Lưu ý, các RequestMethod.POST nhưng kể từ khi giá trị bản đồ rõ ràng có /id/delete, nó không sử dụng POST mặc định được ánh xạ tới /invoices/invoices/id.

Tôi hy vọng tôi rõ ràng. Nếu bất cứ ai có bất cứ đề nghị hoặc mã mẫu (mạnh preffered), tôi sẽ đánh giá cao nó. Tôi đã đọc những SO liên kết để tham khảo: Link1 Link2 Link3

+0

Am phải đối mặt với cùng một vấn đề. Tôi đã thêm bộ lọc quá.nhưng, phương thức xóa đã được chuyển thành POST. Bạn có thể giúp – shalu

Trả lời

7

Bạn đã thiết lập các HiddenHttpMethodFilter trong web.xml của bạn? Bộ lọc đó chuyển đổi các tham số phương thức đã đăng thành các phương thức HTTP và cho phép hỗ trợ chuyển đổi phương thức trong các thẻ biểu mẫu Spring MVC.

<filter> 
    <filter-name>hiddenHttpMethodFilter</filter-name> 
    <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class> 
</filter> 

<filter-mapping> 
    <filter-name>hiddenHttpMethodFilter</filter-name> 
    <servlet-name>servletName</servlet-name> 
</filter-mapping> 
+0

Đang đối mặt với vấn đề tương tự không. Tôi đã thêm bộ lọc quá.nhưng, phương thức xóa đã được chuyển thành POST. Bạn có thể giúp chứ – shalu

2

Dưới đây là tương đương trong Java Config (yêu cầu Servlet API 3.0+)

servletContext 
     .addFilter("HiddenHttpMethodFilter", HiddenHttpMethodFilter.class) 
     .addMappingForUrlPatterns(null, false, "<your desired mapping here>"); 
Các vấn đề liên quan