2011-10-26 6 views
6

Próbuję usunąć obiekt na stronie za pomocą przycisku usuwania linku (a href) lub przycisku usuwania (formularz). Używam przycisk usunąć ponieważ związek wzywa do „GET” zamiast „post”programowanie Sterownik Spring MVC i jsp dla HttpDelete

Jest to kod JSP, który zamierza robić, że:

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

Powstały html to:

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

Jestem bardzo szczęśliwy. Ma metodę, która wskazuje, że jest to działanie DELETE. Oto mój kod kontrolera:

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

Więc, co się dzieje, jest to, że metoda ta nie jest tzw. Mam inną metodę, w której POST tworzy fakturę, a kliknięcie przycisku usuwania powoduje utworzenie faktury. Domyślam się, że kontroler przegląda serwlet jako żądanie POST i używa pierwszej metody, która obsługuje żądanie POST, które w tym przypadku tworzy nową fakturę.

Próbuję zrobić to "RESTful", więc chcę, aby to było /invoice/id i używanie POST, PUT, DELETE, GET, ale nie jestem pewien, jak to zakodować w kontrolerze za pomocą Spring MVC.

jestem w stanie uzyskać to do pracy poprzez dołączenie „czasowniki”, takie jak /invoices/id/delete i konfigurowania kontrolera jako

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

pamiętać, że RequestMethod.POST ale od wartości map wyraźnie mają /id/delete, robi nie używaj domyślnego testu POST mapowanego na /invoices i /invoices/id.

Mam nadzieję, że jestem jasny. Jeśli ktoś ma jakieś sugestie lub przykładowy kod (zdecydowanie preferowany), byłbym wdzięczny. Czytałem te tak linki o referencje: Link1 Link2 Link3

+0

Am stoi ten sam problem. Dodałem też filtr.Ale parapet metody delete został przekonwertowany na POST. Czy możesz pomóc – shalu

Odpowiedz

7

Czy ustawić HiddenHttpMethodFilter w Twojej web.xml? Ten filtr konwertuje zaksięgowane parametry metody na metody HTTP i umożliwia obsługę konwersji metod w teczkach formularza 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

Mam zmierzyć się z tym samym problemem. Dodałem też filtr.Ale parapet metody delete został przekonwertowany na POST. Możesz pomóc – shalu

2

Oto odpowiednik w Java Config (wymaga Servlet API 3.0+)

servletContext 
     .addFilter("HiddenHttpMethodFilter", HiddenHttpMethodFilter.class) 
     .addMappingForUrlPatterns(null, false, "<your desired mapping here>");