@ModelAttribute
Spring MVC'nin amacı ve kullanımı nedir ?
@ModelAttribute
Spring MVC'nin amacı ve kullanımı nedir ?
Yanıtlar:
@ModelAttribute
Model nesnesinin (MVC'deki M;) bir özelliğini ifade eder, bu nedenle "Kişi" olarak adlandırılan bir form destekleme nesnesine sahip bir formumuz olduğunu varsayalım. Daha sonra, Spring MVC'nin bu nesneyi @ModelAttribute
ek açıklamayı kullanarak bir Controller yöntemine sağlamasını sağlayabilirsiniz. :
public String processForm(@ModelAttribute("person") Person person){
person.getStuff();
}
Öte yandan ek açıklama, bir Modelin parçası olması gereken nesneleri tanımlamak için kullanılır. Bu nedenle, Modelde referans verilen bir Person nesnesine sahip olmak istiyorsanız, aşağıdaki yöntemi kullanabilirsiniz:
@ModelAttribute("person")
public Person getPerson(){
return new Person();
}
Bu açıklamalı yöntem, Yaylı Modellere otomatik olarak eklendiğinden, Görünümünüzdeki Kişi nesnesine erişime izin verecektir.
Bkz. "@ModelAttribute Kullanma" .
@ModelAttribute
ilk davanıza ihtiyacınız yok .
@ModelAttribute
Yöntem özniteliklerinde ne zaman kullanmanız gerekir ?
Bunun eski bir iplik olduğunu biliyorum, ama şapkamı ringe atıp suyu biraz daha çamurlayabileceğimi düşündüm :)
İlk anlama @ModelAttribute
çabamın, Spring'in çeşitli ek açıklamaları bir araya getirme kararının bir sonucu olduğunu buldum . Birkaç küçük ek açıklamaya böldüğümde daha netleşti:
Parametre ek açıklamaları için, düşünmek @ModelAttribute
eşdeğer olarak @Autowired + @Qualifier
yani o İlkbahar yönetilen modelden verilen adla bir fasulye almaya çalışır. Adlandırılmış fasulye bulunamazsa, bir hata atmak veya geri dönmek yerine, null
örtük olarak @Bean
yani varsayılan kurucuyu kullanarak yeni bir örnek oluşturma rolünü üstlenir ve fasulyeyi modele ekler.
Yöntem ek açıklamaları için, @ModelAttribute
eşdeğer olarak düşünün @Bean + @Before
, yani kullanıcı kodu tarafından oluşturulan fasulyeyi modele koyar ve her zaman bir istek işleme yönteminden önce çağrılır.
Mecazi @ModelAttribute
olarak, aşağıdaki gibi görüyorum (lütfen kelimenin tam anlamıyla almayın !!):
@Bean("person")
@Before
public Person createPerson(){
return new Person();
}
@RequestMapping(...)
public xxx handlePersonRequest( (@Autowired @Qualifier("person") | @Bean("person")) Person person, xxx){
...
}
Gördüğünüz gibi, Spring @ModelAttribute
her şeyi kapsayan bir ek açıklama yapmak için doğru kararı verdi ; hiç kimse bir açıklama smorgasbord görmek istemez.
@Scope("request")
then :)
Benim tarzım için, her zaman bahar formu jsp nesnesini yakalamak için @ModelAttribute kullanın. örneğin, jsp sayfasında form tasarlıyorum, bu form commandName ile var
<form:form commandName="Book" action="" methon="post">
<form:input type="text" path="title"></form:input>
</form:form>
ve ben kontrol kodu ile nesne takip kodu ile yakalamak
public String controllerPost(@ModelAttribute("Book") Book book)
ve kitabın her alan adı, formun alt öğesindeki yolla eşleşmelidir
catch
Fiil tam olarak çalışmalarını açıklar @ModelAttribute
yaptı. Güzel.
Bu yüzden daha basit bir şekilde açıklamaya çalışacağım. Hadi sahip olalım:
public class Person {
private String name;
public String getName() {
return name;
}
public void setName(final String name) {
this.name = name;
}
}
Spring MVC belgelerinde açıklandığı gibi - @ModelAttribute ek açıklaması yöntemlerde veya yöntem bağımsız değişkenlerinde kullanılabilir . Ve elbette her ikisini aynı anda tek bir kumandada kullanabiliriz.
1. yöntem ek açıklaması
@ModelAttribute(“cities”)
public List<String> checkOptions(){
return new Arrays.asList(new[]{“Sofia”,”Pleven","Ruse”});//and so on
}
Bu yöntemin amacı modele nitelik eklemektir. Dolayısıyla bizim durumumuzda şehirler anahtarının new Arras.asList(new[]{“Sofia”,”Pleven","Ruse”})
Modelde liste değeri olacaktır (Modeli harita olarak düşünebilirsiniz (key: değer)). @ModelAttribute bir kontrol yöntemleri önce çağırılan @ RequestMapping aynı kontrolör içinde, yöntem.
Burada kullanıcıya göstermek için formda kullanılacak ortak bilgileri Model'e eklemek istiyoruz. Örneğin, bir HTML seçimini doldurmak için kullanılabilir:
2. yöntem tartışması
public String findPerson(@ModelAttriute(value="person") Person person) {
//..Some logic with person
return "person.jsp";
}
Yöntem bağımsız değişkenindeki bir @ModelAttribute, bağımsız değişkenin modelden alınması gerektiğini belirtir. Dolayısıyla bu durumda Model kişi nesnesinde anahtar olarak yer almamızı ve değerini almak ve bunu Person person yöntem argümanına koymak istiyoruz . Böyle bir şey yoksa veya (bazen (value = "persson") yanlış yazarsanız, Spring bunu Modelde bulamaz ve varsayılanlarını kullanarak boş Kişi nesnesi oluşturur. Sonra istek parametrelerini alacak ve isimlerini kullanarak bunları Person nesnesine bağlamaya çalışacaktır.
name="Dmitrij"&countries=Lesoto&sponsor.organization="SilkRoad"&authorizedFunds=&authorizedHours=&
Yani ismimiz var ve setName (String name) kullanılarak Person.name dosyasına bağlanacak. Yani
//..Some logic with person
"Dimitrij" değeriyle bu doldurulmuş isme erişebiliyoruz.
Tabii ki Bahar Listeler, Haritalar, Harita Kümeleri Listesi gibi daha karmaşık nesneleri bağlayabilir, ancak sahnenin arkasında veri bağlama büyüsü yapar.
Aynı zamanda argümanlarda @ModelAttribute ile model açıklama yöntemi ve istek yöntemi işleyicisi olabilir. O zaman kuralları birleştirmeliyiz.
Tabii ki tonlarca farklı durum var - @ModelAttribute yöntemleri bir @ControllerAdvice'de de tanımlanabilir ...
Partiye geç kaldýđýmý biliyorum, ama dedikleri gibi "asla geç kalmasan iyi olur." Öyleyse başlayalım, Herkesin bir şeyler açıklamak için kendi yolları var, özetlemeye çalışalım ve birkaç adımda sizin için basitleştirelim; Diyelim ki basit bir formunuz var, form.jsp
<form:form action="processForm" modelAttribute="student">
First Name : <form:input path="firstName" />
<br><br>
Last Name : <form:input path="lastName" />
<br><br>
<input type="submit" value="submit"/>
</form:form>
path = "firstName" path = "lastName" Bunlar, form çağrıldığında çağrı sahipleri çağrıldığında ancak ayarlayıcıları çağrıldığında ve değerleri modelde belirtilen çekirdeğe ayarlandığında StudentClass içindeki alanlar / özelliklerdir. form etiketinde "öğrenci".
Aşağıdaki yöntemleri içeren StudentController'ımız var;
@RequestMapping("/showForm")
public String showForm(Model theModel){ //Model is used to pass data between
//controllers and views
theModel.addAttribute("student", new Student()); //attribute name, value
return "form";
}
@RequestMapping("/processForm")
public String processForm(@ModelAttribute("student") Student theStudent){
System.out.println("theStudent :"+ theStudent.getLastName());
return "form-details";
}
//@ModelAttribute("student") Student theStudent
//Spring automatically populates the object data with form data all behind the
//scenes
şimdi nihayet bir form-details.jsp var
<b>Student Information</b>
${student.firstName}
${student.lastName}
Peki Spring MVC'de @ModelAttribute nedir? Size bir kaynaktan örnek bir tanımı, http://www.baeldung.com/spring-mvc-and-the-modelattribute-annotation @ModelAttribute bir açıklama olduğunu adlandırılmış modeli öznitelik bağlandığı bir yöntem parametresi ya da yöntem dönüş değeri ve sonra bir web görünümüne maruz bırakır.
Aslında olan, formunuzun tüm değerlerini kendisi tarafından alması ve daha sonra onları nesneye bağlamanız veya atamanız için tutar. @RequestParameter ile aynı şekilde çalışır, burada yalnızca bir parametre alırız ve değeri bir alana atarız. Tek fark @ModelAttribute , tek bir parametre yerine tüm form verilerini tutar. Daha sonra geliştirici tarafından kullanılacak form gönderilen verileri tutan sizin için bir fasulye oluşturur.
Her şeyi özetlemek gerekirse. Adım 1: Bir istek gönderilir ve yöntemimiz showForm çalışır ve bir model, öğrenci adı verilen geçici bir fasulye ayarlanır forma yönlendirilir. theModel.addAttribute ("öğrenci", yeni Öğrenci ());
Adım 2: form gönderme modelindeki modelAttribute = "öğrenci" öğrenciyi değiştirir ve şimdi formun tüm parametrelerini tutar
Adım 3: @ModelAttribute ("öğrenci") Öğrenci Öğrenci @ModelAttribute tarafından tutulan değerleri alır ve tüm fasulyeyi / nesneyi Öğrenci'ye atarız.
Adım 4: Sonra teklif verdiğimiz gibi kullanırız, tıpkı benim yaptığım gibi sayfada göstermek gibi
Umarım kavramı anlamanıza yardımcı olur. Teşekkürler
İster Gmail, ister Facebook ya da Instagram ya da başka bir web uygulaması olsun, herhangi bir web uygulamasını kullanın, hepsi son kullanıcı ile uygulama veya kullanıcı arayüzü ve arka uç uygulaması arasında veri veya bilgi alışverişi ile ilgilidir. Spring MVC dünyasında bile veri alışverişinin iki yolu vardır:
Burada ilgilendiğimiz, verilerin kullanıcı arayüzünden Denetleyiciye nasıl iletildiği. Bu 2 şekilde de yapılabilir:
HTML Formu Kullanma: Aşağıdaki senaryoyu inceleyin,
Form verilerini web tarayıcısından gönderdiğimizde, Denetleyici sınıfımızdaki bu verilere nesne olarak erişebiliriz. Bir HTML formu gönderdiğimizde, Spring Container dört şey yapar. Olacak,
Tüm bunların işe yaraması için belirli adımları izlememiz gerekecek.
Öncelikle, Kullanıcı sayısının, alan sayısının HTML formundaki alan sayısıyla tam olarak eşleşmesi gereken bir model sınıfı tanımlamamız gerekir. Ayrıca, HTML formunda kullandığımız adlar, Java sınıfındaki adlarla eşleşmelidir. Bu ikisi çok önemlidir. İsimler eşleşmeli, formdaki alan sayısı oluşturduğumuz sınıftaki alan sayısı ile eşleşmelidir. Bunu yaptıktan sonra, Kapsayıcı gelen verileri otomatik olarak okuyacak, bu modelin bir nesnesini yaratacak, değerleri ayarlayacak ve Denetleyiciye teslim edecektir. Denetleyici içindeki bu değerleri okumak için @ModelAttribute kullanırızyöntem parametreleri hakkında ek açıklama. Denetleyicide yöntemler oluşturduğumuzda, @ModelAttribute kullanacağız ve bu nesneye Kapsayıcı tarafından otomatik olarak verilecek bir parametre ekleyeceğiz.
Bir kullanıcıyı kaydetmek için örnek kod:
@RequestMapping(value = "registerUser", method = RequestMethod.POST)
public String registerUser(@ModelAttribute("user") User user, ModelMap model) {
model.addAttribute("user", user);
return "regResult";
}
Umarım bu şematik açıklama yardımcı olmuştur!
Bu, İlkbaharda veri bağlama amacıyla kullanılır MVC
. İçinde form öğesi olan bir jsp olsun
üzerinde
JSP
<form:form action="test-example" method="POST" commandName="testModelAttribute"> </form:form>
(Yaylı Form yöntemi, Basit form elemanı da kullanılabilir)
Kontrolör Tarafında
@RequestMapping(value = "/test-example", method = RequestMethod.POST)
public ModelAndView testExample(@ModelAttribute("testModelAttribute") TestModel testModel, Map<String, Object> map,...) {
}
Şimdi formu gönderdiğinizde, form alanları değerlerini kullanabileceksiniz.
@ModelAttribute yöntem bağımsız değişkenleri / parametresi olarak veya yöntem bildiriminden önce kullanılabilir. Bu ek açıklamanın temel amacı, istek parametrelerini veya form alanlarını bir model nesnesine bağlamaktır
@ModelAttribute
(@ModelAttribute("Testing") Test test) as Testing
verilen örnekte sizin tarafınızdan belirtilen adla bir öznitelik oluşturur , Test, çekirdeğin referansı olan fasulye testidir ve Test, jsp sayfalarında sakladığınız değerlerin alınması için daha fazla kullanabilmeniz için modelde kullanılabilir senin içinde ModelAttribute
.
@ModelAttribute, kontrolör sınıfındaki mantığımızı gerçekleştirmek için jsp alanlarından Pojo calss'a sadece değeri bağlar. Payandalara aşina iseniz, bu form gönderildikten sonra formbean nesnesini doldurmak gibidir.
ModelAttribute notu, Spring MVC Web uygulamasının bir parçası olarak kullanılır ve iki senaryoda kullanılabilir.
Her şeyden önce, bir JSP öncesi yük modeline veri enjekte etmek için kullanılabilir. Bu özellikle, tüm verilerin kendisini görüntülemek için bir JSP'nin gerekli olmasını sağlamada yararlıdır. Bir enjeksiyon, modele bir yöntem bağlanarak elde edilir.
İkincisi, mevcut bir modelden veri okumak ve bunu koçun yönteminin parametrelerine atamak için kullanılabilir.
refrence https://dzone.com/articles/using-spring-mvc%E2%80%99s
Yöntem Düzeyinde
Ek açıklama yöntem düzeyinde kullanıldığında, bu yöntemin amacının bir veya daha fazla model özelliği eklemek olduğunu belirtir.
@ModelAttribute
public void addAttributes(Model model) {
model.addAttribute("india", "india");
}
Yöntem Bağımsız Değişkeninde 1. Yöntem bağımsız değişkeni olarak kullanıldığında, bağımsız değişkenin modelden alınması gerektiğini belirtir. Mevcut olmadığında ve önce örneklenip sonra modele eklenip modelde bir kez bulunduğunda, argüman alanları eşleşen adlara sahip tüm istek parametrelerinden doldurulmalıdır. Böylece, form verilerini bir fasulye ile bağlar.
@RequestMapping(value = "/addEmployee", method = RequestMethod.POST)
public String submit(@ModelAttribute("employee") Employee employee) {
return "employeeView";
}