2010-12-06 16 views
9

Yay 3 MVC, RESTful yöntemlerinin tümünü destekler: GET, POST, PUT ve DELETE. Ama onun görüş teknolojisi onları formlarda destekliyor mu? Değilse, form:form etiketindeki method özniteliğinin gerçek kullanımı nedir? Bahar Baharı MVC, POST ve GET dışındaki HTML formlarındaki istekleri işleyebilir mi?

ben formdaki PUT yöntemi kullanmaya çalıştı: HTML Oluşturulan

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

oldu:

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

O most browsers don't support other methods besides GET and POST beri açıktır. Ancak Bahar, _method adı ve METHOD_NAME değeriyle ek input ile işleyebilir. Yapar?

I

@RequestMapping(method=RequestMethod.PUT) 

o alacak olan açıklamalı bir kontrol yöntemi, POSTdesteklenmediğini istek yöntemi için belirtilen formu gönderirken. Ama neden POST ve PUT değil? Kaputun altında gerçekte ne var?

cevap

16

_method adı verilen "gizli parametre" nin kullanımı, Spring MVC'nin etiket kitaplığına özgü değildir, ancak birkaç başka istemci çerçevesi tarafından da kullanılır. Bahar, sadece olduğu gibi konvansiyonu takip ediyor. Düzgün bu kullanmak için

, sen (HiddenHttpMethodFilterjavadoc bakınız) senin web.xml, bir filtre ekleyin HttpServletRequest bir "gerçek" HTTP yöntemi temsil içine _method parametreyi döner, hangi gerekir. Bu, PUT ve DELETE eksikliğinin bir tarayıcı problemi olduğu gerçeğini vurgulamak için bir filtre olarak yapılır - sunucu API'si bunu desteklemektedir.

Bu yöntemleri formunuzda kullanmak isterseniz, bu filtreyi eklemeniz gerekir.

P.S. "POST desteklenmiyor" iletisini almanızın nedeni, formunuzun POST kullanmasıdır ve işleyiciniz PUT ile açıklamalıdır, bu nedenle eşleşmez. Filtreyi tanımladığınızdan, _method parametresi yoksayılır.