10

Spring 3 MVCは、GET、POST、PUT、およびDELETEの4つのRESTfulメソッドすべてをサポートします。しかし、そのビューテクノロジーはフォーム上でそれらをサポートしていますか?そうでない場合、タグでのmethod属性の実際の使用法は何ですか?form:form

フォームでPUTメソッドを使用しようとしました:

<form:form action="/myaction" method="PUT">
   ...
</form:form>

生成されたHTMLは次のとおりです。

<form id="command" action="/myaction" method="post">
   <input type="hidden" name="_method" value="PUT"/>
   ...
</form>

ほとんどのブラウザはGETとPOST以外の他のメソッドをサポートしていないので、それは明らかです。しかし、Springはinput名前_methodと値を追加してそれを処理できますMETHOD_NAME。しますか?

指定されたフォームをで注釈が付けられたコントローラーメソッドに送信すると

@RequestMapping(method=RequestMethod.PUT)

POSTリクエストメソッドはサポートされていないと主張しています。しかし、なぜそうPOSTではないのPUTですか?内部で実際に何が起こりますか?

4

1 に答える 1

18

呼び出される「非表示パラメーター」の使用は、_methodSpring MVCのタグライブラリに固有のものではありませんが、他のいくつかのクライアントフレームワークでも使用されます。春は、そのような慣習に従っているだけです。

これを適切に使用するには、にフィルターを追加する必要がありますweb.xml( 、 javadocHiddenHttpMethodFilterを参照)。これにより、パラメーターが。の「実際の」HTTPメソッド表現に変換されます。これは、ブラウザの問題であるという事実を強調するためのフィルタとして実行されます。サーブレットAPIはそれを適切にサポートします。_methodHttpServletRequestPUTDELETE

したがって、フォームでこれらのメソッドを使用する場合は、そのフィルターを追加する必要があります。

PS「POSTnotsupported」メッセージが表示される理由は、フォームでが使用さPOSTれており、ハンドラーにが注釈が付けられてPUTいるため、一致しないためです。フィルタが定義されていないため、_methodパラメータは無視されます。

于 2010-12-06T08:21:42.117 に答える