2011-10-26 17 views
6

ページ上のエンティティを削除リンク(href)または削除ボタン(フォーム)で削除しようとしています。私は、これはそれを行う上意向JSPコードである代わりに、「POST」のプログラミングHttpDelete用のSpring MVCコントローラとjsp

を「GET」のリンクコールので、削除ボタンを使用しています:

<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> 

だから、私はとても幸せです。これはDELETEアクションであることを示す_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を行う別の方法があります。私の推測では、コントローラはPOSTリクエストとしてサーブレットを調べ、この場合は新しい請求書を作成するPOSTリクエストを処理する最初のメソッドを使います。

私はこれを/invoice/idにしてPOST, PUT, DELETE, GETを使用したいと思いますが、Spring MVCを使用してコントローラーでコード化する方法がわかりません。

私はこれが

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

注意、RequestMethod.POSTような/invoices/id/deleteとして「動詞」を追加し、コントローラを設定することによって動作するように取得することができていますが、マップの値が明示的に/id/deleteを持っているので、それがありません/invoices/invoices/idにマッピングされているデフォルトのPOSTは使用しないでください。

私は明らかに希望です。誰かが提案やサンプルコード(強く推奨)を持っているなら、私はそれを感謝します。 Link1 Link2 Link3

+0

同じ問題に直面しています。私はあまりにもフィルタを追加しました。しかし、削除メソッドは、POSTに変換されたsill。 – shalu

答えて

7

あなたのweb.xmlにHiddenHttpMethodFilterを設定しました:私は参照のためのこれらのSOのリンクを読みましたか?このフィルタは、公開されたメソッドのパラメータをHTTPメソッドに変換し、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

同じ問題に直面していますか?私はあまりにもフィルタを追加しました。しかし、削除メソッドは、POSTに変換されたsill。あなたは助けてくれる? – shalu

2

は、Java Configで相当(3.0+サーブレットAPIが必要)である

servletContext 
     .addFilter("HiddenHttpMethodFilter", HiddenHttpMethodFilter.class) 
     .addMappingForUrlPatterns(null, false, "<your desired mapping here>"); 
関連する問題