Spring MVC i bilješka @ModelAttribute

1. Pregled

Jedna od najvažnijih napomena Spring-MVC je napomena @ModelAttribute.

The @ModelAttribute je napomena koja veže parametar metode ili povratnu vrijednost metode na imenovani atribut modela, a zatim je izlaže web prikazu.

U sljedećem ćemo primjeru demonstrirati upotrebljivost i funkcionalnost bilješke kroz zajednički koncept: obrazac koji je poslao zaposlenik tvrtke.

2. The @ModelAttribute u Dubini

Kao što je uvodni odlomak otkrio, @ModelAttribute može se koristiti ili kao parametar metode ili na razini metode.

2.1 Na razini metode

Kada se napomena koristi na razini metode, to znači da je svrha te metode dodati jedan ili više atributa modela. Takve metode podržavaju iste tipove argumenata kao metode @RequestMapping, ali one se ne mogu izravno preslikati na zahtjeve.

Pogledajmo ovdje jedan brzi primjer kako bismo počeli razumjeti kako ovo funkcionira:

@ModelAttribute javna void addAttributes (model modela) {model.addAttribute ("msg", "Dobrodošli u Nizozemsku!"); } 

U primjeru prikazujemo metodu koja dodaje atribut imenovan poruka svima modeldefinirane u klasi kontrolera.

Naravno, ovo ćemo vidjeti na djelu kasnije u članku.

Općenito, Spring-MVC uvijek će prvo uputiti poziv toj metodi, prije nego što pozove bilo koje metode obrađivača zahtjeva. To je, @ModelAttribute metode pozivaju se prije nego što su metode kontrolera označene s @RequestMapping se pozivaju. Logika iza slijeda je da se objekt modela mora stvoriti prije početka bilo kakve obrade unutar metoda kontrolera.

Također je važno da odgovarajuću klasu označite kao @ControllerAdvice. Dakle, vrijednosti možete dodati u Model koji će biti identificirani kao globalni. To zapravo znači da za svaki zahtjev postoji zadana vrijednost za svaku metodu u dijelu odgovora.

2.2 Kao argument metode

Kada se koristi kao argument metode, to znači da argument treba dohvatiti iz modela. Ako nije prisutan, treba ga prvo instancirati, a zatim dodati modelu, a nakon što je prisutan u modelu, polja argumenata treba popuniti iz svih parametara zahtjeva koji imaju podudarna imena.

U isječku koda koji slijedi zaposlenik atribut model popunjava se podacima iz obrasca koji je poslan na addEfficiee krajnja točka. Spring MVC to čini iza kulisa prije nego što pozove metodu slanja:

@RequestMapping (value = "/ addEfficiee", method = RequestMethod.POST) public String submit (@ModelAttribute ("zaposlenik") Zaposlenik zaposlenik) {// Kôd koji koristi povratak objekta zaposlenika "workerView"; }

Kasnije u ovom članku vidjet ćemo cjelovit primjer kako koristiti zaposlenik objekt za popunjavanje workerView predložak.

Dakle, podatke obrasca veže zrnom. Kontroler je označen s @RequestMapping može imati prilagođene argumente klase s @ModelAttribute.

To je ono što je obično poznato kao vezivanje podataka u Spring-MVC, uobičajenom mehanizmu koji vas štedi od potrebe za raščlanjivanjem svakog polja obrasca pojedinačno.

3. Primjer obrasca

U ovom ćemo odjeljku dati primjer naveden u odjeljku s pregledom: vrlo osnovni obrazac koji korisnika (zaposlenika tvrtke, u našem konkretnom primjeru) traži da unese neke osobne podatke (posebno Ime i iskaznica). Nakon završetka predaje i bez ikakvih pogrešaka, korisnik očekuje da će prethodno prijavljeni podaci biti prikazani na drugom zaslonu.

3.1 Pogled

Stvorimo najprije jednostavan obrazac s poljima id i name:

 Ime Id 

3.2 Kontroler

Evo klase kontrolera, u kojoj se implementira logika za gore spomenuti pogled:

@Controller @ControllerAdvice javna klasa EmployeeController {privatna mapa workerMap = new HashMap (); @RequestMapping (value = "/ addEfficiee", method = RequestMethod.POST) public String submit (@ModelAttribute ("zaposlenik") Zaposlenik zaposlenika, BindingResult result, ModelMap model) {if (result.hasErrors ()) {return "error" ; } model.addAttribute ("name", worker.getName ()); model.addAttribute ("id", worker.getId ()); workerMap.put (zaposlenik.getId (), zaposlenik); povratak "workerView"; } @ModelAttribute javna void addAttributes (model modela) {model.addAttribute ("msg", "Dobrodošli u Nizozemsku!"); }}

U podnijeti() metoda koju imamo Zaposlenik objekt vezan za naš Pogled. Možete li vidjeti snagu ove napomene? Polja obrazaca možete jednostavno mapirati u objektni model. U metodi dohvaćamo vrijednosti iz obrasca i postavljamo ih na ModelMap.

Na kraju se vraćamo workerView, što znači da će se odgovarajuća JSP datoteka pozivati ​​kao Pogled predstavnik.

Nadalje, postoji i addAttributes () metoda. Njegova je svrha dodavanje vrijednosti u Model koji će se identificirati globalno. Odnosno, zadana vrijednost vratit će se kao odgovor na svaki zahtjev za svaku metodu kontrolera. Također moramo napomenuti određenu klasu kao @ControllerAdvice.

3.3 Model

Kao što je već spomenuto, Model objekt je vrlo pojednostavljen i sadrži sve što zahtijevaju atributi "front-end". Sada, pogledajmo primjer:

@XmlRootElement zaposlenik u javnoj klasi {private long id; privatni naziv niza; javni zaposlenik (dugi id, naziv niza) {this.id = id; this.name = ime; } // uklonjeni standardni getteri i postavljači}

3.4 Zamotajte

The @ControllerAdvice pomaže kontroloru i posebno, @ModelAttribute metode koje vrijede za sve @RequestMapping metode. Naravno, naša addAttributes () metoda će se prva pokrenuti, prije ostatka @RequestMapping metode.

Imajući to na umu i nakon oba podnijeti() i addAttributes () pokrenuti, mogli bismo se samo pozvati na njih u Pogled vratio iz Kontroler razreda, spominjanjem njihovog imena unutar dolariziranog dua kovrčavih zagrada, kao na primjer $ {name}.

3.5 Prikaz rezultata

Otisnimo sada ono što smo dobili iz obrasca:

$ {msg}

Ime: $ {name} ID: $ {id}

4. Zaključak

U ovom uputstvu istražili smo upotrebu @ModelAttribute napomena, i za argumente metode i za slučajeve upotrebe na razini metode.

Provedbu ovog jednostavnog vodiča možete pronaći u projektu github.