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.