2011-10-26 11 views
6

मैं एक हटाए गए लिंक (ए href) या हटाएं बटन (फॉर्म) के माध्यम से किसी पृष्ठ पर एक इकाई को हटाने की कोशिश कर रहा हूं। मैं के बाद से एक लिंक एक "पोस्ट करें"प्रोग्रामिंग स्प्रिंग एमवीसी नियंत्रक और जेएसपी HttpDelete

के बजाय "GET" के लिए कहता है बटन को नष्ट उपयोग कर रहा हूँ यह वह जगह है JSP कोड जो कि कर रही पर इरादा रखता है:

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

जिसके परिणामस्वरूप एचटीएमएल यह है:

<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 है जो इंगित करता है कि यह एक निष्कासित कार्रवाई है। यहां मेरा नियंत्रक कोड है:

@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 अनुरोध को संभालता है जो इस मामले में एक नया चालान बनाना है।

मैं इस "RESTful" बनाने के लिए तो मैं इस /invoice/id और POST, PUT, DELETE, GET का उपयोग कर रहना चाहता हूँ की कोशिश, लेकिन मैं कोड करने के लिए कैसे है कि नियंत्रक वसंत MVC का उपयोग करने में यकीन नहीं है।

मैं इस तरह के /invoices/id/delete के रूप में "क्रियाएं" जोड़कर और के रूप में

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

ध्यान दें, RequestMethod.POST नियंत्रक की स्थापना लेकिन जब से नक्शा मूल्यों को स्पष्ट रूप से /id/delete है, यह करता है के द्वारा काम करने के लिए प्राप्त करने में सक्षम हूँ डिफ़ॉल्ट पोस्ट का उपयोग न करें जो /invoices और /invoices/id पर मैप किया गया है।

मुझे आशा है कि मैं स्पष्ट हूं। अगर किसी के पास कोई सुझाव या नमूना कोड है (दृढ़ता से preffered), मैं इसकी सराहना करता हूं। मैं संदर्भ के लिए इन अतः लिंक पढ़ा है: Link1 Link2 Link3

+0

Am एक ही समस्या का सामना करना पड़ (सर्वलेट एपीआई 3.0+ की आवश्यकता है)। मैंने फिल्टर भी जोड़ा है। लेकिन हटाएं विधि हटाएं POST में परिवर्तित हो गई है। क्या आप – shalu

उत्तर

7

आप अपने web.xml में HiddenHttpMethodFilter सेट किया है? वह फ़िल्टर पोस्ट विधि पैरामीटर को HTTP विधियों में परिवर्तित करता है और स्प्रिंग एमवीसी फॉर्म टैग में विधि रूपांतरण के लिए समर्थन की अनुमति देता है।

<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

सहायता कर सकते हैं एक ही समस्या का सामना कर रहे हैं। मैंने फिल्टर भी जोड़ा है। लेकिन हटाएं विधि हटाएं POST में परिवर्तित हो गई है। क्या आप मदद कर सकते हैं – shalu

2

यहाँ जावा कॉन्फ़िग में बराबर है

servletContext 
     .addFilter("HiddenHttpMethodFilter", HiddenHttpMethodFilter.class) 
     .addMappingForUrlPatterns(null, false, "<your desired mapping here>"); 
संबंधित मुद्दे