Jarné MVC a anotácia @ModelAttribute

1. Prehľad

Jednou z najdôležitejších anotácií Spring-MVC je anotácia @ModelAttribute.

The @ModelAttribute je anotácia, ktorá viaže parameter metódy alebo návratovú hodnotu metódy na pomenovaný atribút modelu a potom ju vystavuje webovému zobrazeniu.

V nasledujúcom príklade demonštrujeme použiteľnosť a funkčnosť anotácie prostredníctvom spoločného konceptu: formulár odoslaný od zamestnanca spoločnosti.

2. The @ModelAttribute v hĺbke

Ako odhalil úvodný odsek, @ModelAttribute možno použiť buď ako parameter metódy, alebo na úrovni metódy.

2.1 Na úrovni metódy

Keď sa anotácia použije na úrovni metódy, znamená to, že účelom tejto metódy je pridať jeden alebo viac atribútov modelu. Takéto metódy podporujú rovnaké typy argumentov ako metódy @RequestMapping, ale nemožno ich priamo mapovať na požiadavky.

Pozrime sa na krátky príklad, aby sme pochopili, ako to funguje:

@ModelAttribute public void addAttributes (Model model) {model.addAttribute ("msg", "Vitajte v Holandsku!"); } 

V príklade si ukážeme metódu, ktorá pridá atribút s názvom správa všetkým Models definované v triede radiča.

Neskôr to samozrejme uvidíme v akcii.

Vo všeobecnosti Spring-MVC vždy najskôr zavolá tejto metóde, skôr ako zavolá akékoľvek metódy obsluhy žiadosti. To znamená, @ModelAttribute metódy sú vyvolané skôr, ako sú metódy radiča anotované pomocou @RequestMapping sú vyvolané. Logika za touto sekvenciou je, že objekt modelu musí byť vytvorený skôr, ako začne akékoľvek spracovanie vo vnútri metód radiča.

Je tiež dôležité, aby ste príslušnú triedu anotovali ako @ControllerAdvice. Takto môžete pridávať hodnoty do priečinka Model ktoré budú označené ako globálne. To v skutočnosti znamená, že pre každú požiadavku existuje predvolená hodnota pre každú metódu v časti odpovede.

2.2 Ako argument metódy

Ak sa použije ako argument metódy, znamená to, že argument sa má načítať z modelu. Ak nie je prítomný, malo by sa najskôr vytvoriť jeho inštanciu a potom sa pridať do modelu a po jeho pridaní do modelu by sa polia argumentov mali vyplniť zo všetkých parametrov požiadavky, ktoré majú zodpovedajúce názvy.

V útržku kódu, ktorý nasleduje za zamestnanec atribút model je vyplnený údajmi z formulára odoslaného do addEmployee koncový bod. Jarná MVC to robí v zákulisí pred vyvolaním metódy odoslania:

@RequestMapping (value = "/ addEmployee", method = RequestMethod.POST) public String submit (@ModelAttribute ("employee") Zaměstnanec zamestnanec) {// Kód, ktorý používa objekt zamestnanca, vráti "employeeView"; }

Ďalej v tomto článku uvidíme kompletný príklad použitia zamestnanec objekt na vyplnenie employeeView šablóna.

Takže spája údaje formulára s fazuľou. Kontrolór anotoval s @RequestMapping môžu mať anotované argumenty vlastnej triedy @ModelAttribute.

Toto je všeobecne známe ako väzba údajov v Spring-MVC, spoločnom mechanizme, ktorý vám ušetrí potrebu analyzovať každé pole formulára osobitne.

3. Príklad formulára

V tejto časti uvedieme príklad, na ktorý sa odkazuje v časti prehľadu: veľmi základná forma, ktorá používateľa (zamestnanca spoločnosti, v našom konkrétnom príklade) vyzve na zadanie niektorých osobných údajov (konkrétne názov a id). Po dokončení odosielania a bez akýchkoľvek chýb používateľ očakáva, že sa predtým odoslané údaje zobrazia na inej obrazovke.

3.1 Pohľad

Najprv si vytvoríme jednoduchý formulár s poľami id a name:

 Meno 

3.2 Prevádzkovateľ

Tu je trieda radiča, kde sa implementuje logika pre vyššie uvedený pohľad:

@Controller @ControllerAdvice verejná trieda EmployeeController {private Map employeeMap = new HashMap (); @RequestMapping (value = "/ addEmployee", method = RequestMethod.POST) public String submit (@ModelAttribute ("employee") zamestnanec zamestnanec, výsledok BindingResult, model ModelMap) {if (result.hasErrors ()) {return "error" ; } model.addAttribute ("meno", employee.getName ()); model.addAttribute ("id", employee.getId ()); employeeMap.put (employee.getId (), zamestnanec); vrátiť "employeeView"; } @ModelAttribute public void addAttributes (Model model) {model.addAttribute ("msg", "Vitajte v Holandsku!"); }}

V Predložiť() metóda, ktorú máme Zamestnanec objekt viazaný na náš vyhliadka. Vidíte silu tejto anotácie? Polia formulárov môžete namapovať na objektový model tak jednoducho. V metóde načítame hodnoty z formulára a nastavíme ich na ModelMap.

Na konci sa vraciame employeeView, čo znamená, že príslušný súbor JSP sa bude volať ako vyhliadka reprezentatívny.

Ďalej existuje aj addAttributes () metóda. Jeho účelom je pridať hodnoty do Model ktoré budú identifikované globálne. To znamená, že predvolená hodnota bude vrátená ako odpoveď na každú požiadavku každej metóde radiča. Musíme tiež anotovať konkrétnu triedu ako @ControllerAdvice.

3.3 Model

Ako už bolo spomenuté, Model objekt je veľmi zjednodušujúci a obsahuje všetko, čo sa vyžaduje od atribútov „front-end“. Poďme sa teraz pozrieť na príklad:

@XmlRootElement verejná trieda Employee {private long id; súkromné ​​meno reťazca; public Employee (long id, String name) {this.id = id; this.name = meno; } // štandardné getre a setre odstránené}

3.4 Zabaliť

The @ControllerAdvice pomáha kontrolórovi, najmä @ModelAttribute metódy, ktoré platia pre všetkých @RequestMapping metódy. Samozrejme náš addAttributes () metóda bude úplne prvá, pred zvyškom @RequestMapping metódy.

Majte to na pamäti a po oboch Predložiť() a addAttributes () sú spustené, mohli by sme sa na ne jednoducho odvolať v vyhliadka sa vrátil z Kontrolór triedy uvedením ich krstného mena vo vnútri duly s kučeravými zátvorkami, ako je napríklad $ {name}.

3.5 Zobrazenie výsledkov

Teraz si vytlačme, čo sme dostali z formulára:

$ {msg}

Meno: $ {name} ID: $ {id}

4. Záver

V tomto tutoriáli sme skúmali použitie @ModelAttribute anotácia, pre argumenty metódy aj pre prípady použitia na úrovni metódy.

Implementáciu tohto jednoduchého tutoriálu nájdete v projekte github.


$config[zx-auto] not found$config[zx-overlay] not found