Tavaszi MVC és a @ModelAttribute Annotation
1. Áttekintés
Az egyik legfontosabb Spring-MVC kommentár a @ModelAttribute kommentár.
A @ModelAttribute olyan kommentár, amely egy metódus paramétert vagy metódusvisszatérési értéket egy megnevezett modellattribútumhoz köti, majd webes nézetnek teszi ki.
A következő példában bemutatjuk az annotáció használhatóságát és funkcionalitását egy közös koncepción keresztül: egy űrlapot, amelyet egy vállalat alkalmazottjától küldtek be.
2. A @ModelAttribute a Mélységben
Amint a bevezető bekezdésből kiderült, @ModelAttribute vagy metódus paraméterként, vagy metódus szinten használható.
2.1 A módszer szintjén
Ha az annotációt a módszer szintjén használják, akkor ez azt jelzi, hogy a módszer célja egy vagy több modellattribútum hozzáadása. Az ilyen módszerek ugyanazokat az argumentumtípusokat támogatják, mint a @RequestMapping metódusok, de ezeket nem lehet közvetlenül lekérdezni.
Nézzünk meg egy gyors példát itt, hogy megértsük ennek működését:
@ModelAttribute public void addAttributes (Model model) {model.addAttribute ("msg", "Isten hozta Hollandiában!"); }
A példában egy metódust mutatunk be, amely egy megnevezett attribútumot ad hozzá üzenet mindenkinek modells a vezérlő osztályban vannak meghatározva.
Természetesen ezt a cikk későbbi részében látni fogjuk.
Általánosságban elmondható, hogy a Spring-MVC mindig hívást kezdeményez erre a módszerre, mielőtt bármilyen kéréskezelő metódust meghívna. Vagyis @ModelAttribute metódusokat hívjuk meg, mielőtt a vezérlő metódusai annotálva lennének @RequestMapping hivatkoznak. A szekvencia logikája az, hogy a modellobjektumot létre kell hozni, mielőtt bármilyen feldolgozás megkezdődne a vezérlő metódusain belül.
Fontos továbbá, hogy az adott osztályt @ControllerAdvice néven jegyezze fel. Így hozzáadhat értékeket a Modell amelyet globálisként fognak azonosítani. Ez valójában azt jelenti, hogy minden kéréshez létezik alapértelmezett érték, a válaszrészben szereplő minden módszerhez.
2.2 Módszer-érvként
Metódus argumentumként használva azt jelzi, hogy az argumentumot be kell szerezni a modellből. Ha nincs jelen, akkor először példányosítani kell, majd hozzá kell adni a modellhez, és miután megjelenik a modellben, az argumentum mezőket ki kell tölteni az összes kérelemparaméterből, amelyeknek egyező neve van.
A következő kódrészletben: munkavállaló A model attribútumot a addEmployee végpont. A tavaszi MVC ezt a színfalak mögött csinálja, mielőtt beküldené a beküldési módszert:
@RequestMapping (value = "/ addEmployee", method = RequestMethod.POST) public String submit (@ModelAttribute ("worker") Employee alkalmazott) {// Kód, amely a "töötajaView" visszatérési alkalmazott objektumot használja; }
A cikk későbbi részében egy teljes példát fogunk látni a munkavállaló objektum a workerView sablon.
Tehát, az űrlapadatokat babgal köti össze. A vezérlő megjegyzéssel jelölte @RequestMapping lehet egyedi osztály argumentum (oka) t jelölni @ModelAttribute.
Ez az úgynevezett adatkötés a Spring-MVC-ben, egy közös mechanizmus, amely megmenti Önt attól, hogy minden egyes űrlapmezőt külön-külön kelljen elemeznie.
3. Formapélda
Ebben a részben az áttekintő részben említett példát közöljük: egy nagyon alapvető forma, amely arra kéri a felhasználót (a konkrét példánkban egy vállalat alkalmazottját), hogy adjon meg néhány személyes információt (kifejezetten név és id). A beküldés befejezése után és hiba nélkül a felhasználó arra számít, hogy a korábban beküldött adatokat egy másik képernyőn jeleníti meg.
3.1 A nézet
Először hozzunk létre egy egyszerű űrlapot azonosító és név mezőkkel:
Név azonosító
3.2 A vezérlő
Itt van a vezérlő osztály, ahol a fent említett nézet logikája megvalósul:
@Controller @ControllerAdvice nyilvános osztály EmployeeController {private Map workerMap = új HashMap (); @RequestMapping (value = "/ addEmployee", metódus = RequestMethod.POST) nyilvános karakterlánc beküldése (@ModelAttribute ("alkalmazott") Alkalmazott alkalmazott, BindingResult eredmény, ModelMap modell) {if (result.hasErrors ()) {return "hiba" ; } model.addAttribute ("név", worker.getName ()); model.addAttribute ("id", worker.getId ()); workerMap.put (alkalmazott.getId (), alkalmazott); return "workerView"; } @ModelAttribute public void addAttributes (Model model) {model.addAttribute ("msg", "Welcome to Netherlands!"); }}
Ban,-ben Beküldés() módszerünk van Munkavállaló a mi tárgyunkhoz kötött tárgy Kilátás. Látja ennek az annotációnak az erejét? Az űrlapmezőket egy objektummodellhez hasonlóan egyszerűen leképezheti. A metódusban lekérjük az űrlapból az értékeket, és azokat beállítjuk ModelMap.
A végén visszatérünk workerView, ami azt jelenti, hogy a megfelelő JSP fájlt a Kilátás reprezentatív.
Továbbá létezik egy addAttributes () módszer. Célja az értékek hozzáadása a Modell amelyet globálisan azonosítani fognak. Vagyis egy alapértelmezett értéket adunk vissza válaszként minden kérésre minden vezérlő metódusra. Azt is fel kell tüntetnünk az adott osztályt, hogy @ControllerAdvice.
3.3 A modell
Mint korábban említettük, a Modell Az objektum nagyon leegyszerűsített és tartalmazza mindazt, amit a „front-end” attribútumok megkövetelnek. Most nézzünk meg egy példát:
@XmlRootElement public class Employee {private long id; privát karakterlánc neve; public Employee (hosszú azonosító, karakterlánc neve) {this.id = id; ez.név = név; } // szabványos mérőeszközök és beállítók eltávolítva
3.4 Összecsomagolás
A @ControllerAdvice segíti az irányítót, és különösen: @ModelAttribute mindenki számára alkalmazható módszerek @RequestMapping mód. Természetesen a mi addAttributes () metódus lesz a legelső, a többi metódus előtt @RequestMapping mód.
Ezt szem előtt tartva és mindkettő után Beküldés() és addAttributes () futnak, csak hivatkozhatnánk rájuk a Kilátás visszatért a Vezérlő osztályban, megemlítve a nevüket egy dolláros göndör nadrágtartó duóban, például $ {name}.
3.5 Eredmények megtekintése
Most nyomtassuk ki, amit az űrlapból kaptunk:
$ {msg}
Név: $ {name} ID: $ {id}
4. Következtetés
Ebben az oktatóanyagban megvizsgáltuk a @ModelAttribute annotáció, metódus argumentumokhoz és metódus szintű használati esetekhez egyaránt.
Ennek az egyszerű oktatóanyagnak a megvalósítása megtalálható a github projektben.