2011-01-15 17 views
6

Bahar 3 referans bize öğretir: Bir yöntem parametreye üzerine yerleştirdiğinizdeMetot argümanı düzeyinde @ModelAttribute ek açıklamasının anlamı nedir?

, @ModelAttribute özgü, açıklamalı yöntem parametresi

bir modeli niteliğini eşleyen Bunu anlamıyorum magic spell, çünkü model nesnesinin takma adından (dönüş türü olarak ModelMap kullanılıyorsa anahtar değeri) istek işleyicisi yönteminin yürütülmesinden sonra Görünüm'e geçirildi. Bu nedenle, istek işleyici yöntemi yürütüldüğünde, model nesnesinin adı, yöntem parametresine eşlenemez.

Bu çelişkiyi çözmek için stackoverflow'a gittim ve this ayrıntılı örneğini buldum. Örneğin yazarı şunları söyledi:

"personAttribute" modeli Öyle görünüyor JSP

kontrolöre geçti // o İlkbahar referans olarak charmed edilir

...

Taklitleri dağıtmak için örnek uygulamamı çevremde dağıttım ve @ModelAttribute ek açıklama yöntemini MainController.saveEdit() yönteminden kesin. Sonuç olarak uygulama herhangi bir değişiklik yapmadan çalışır! Sonuç olarak: web formunun alan değerlerini argümanın alanlarına iletmek için @ModelAttribute ek açıklamasına gerek yoktur. Sonra ben soruya takıldım: @ModelAttribute ek açıklamasının anlamı nedir? Tek örnek, Görünüm'deki model nesnesinin takma adını ayarlamaksa, neden bu nesneyi açıkça ModelMap nesnesine eklemekten daha iyi? bağımsız değişken açıklamalı değilse ve türü (başka bir deyişle, HttpServletRequest, ModelMap ve benzeri değil), bu @ModelAttribute -annotated argüman gibi tedavi hakkında hiçbir özel bir anlamı vardır -

cevap

8

noktası @ModelAttribute isteğe olmasıdır.

Yani, @ModelAttribute etkili iki durumda da gereklidir:

  • özelliğin adını belirtin. @ModelAttribute belirtilmezse veya boş value varsa, varsayılan adı kullanılır (ilk harfin kapitone edilmiş ilk harfiyle argümanının adı). Bağımsız değişkenin özel bir anlamı varsa,

  • Örneğin, etki alanı nesnesi, öznitelik java.security.Principal'u uzatırsa, ek açıklama eklemeniz gerekir, aksi halde Bahar bunun yerine HttpServletRequest.getUserPrincipal() sonucunu iletir.

Bazı insanlar argümanlar anlamını belgelemek amacıyla, gerçek ihtiyaç duymadan @ModelAttribute kullanma eğilimindedir.