Začíname s formulármi na jar MVC

1. Prehľad

V tomto článku sa budeme zaoberať jarnými formulármi a viazaním údajov na kontrolóra. Ďalej sa pozrieme na jednu z hlavných anotácií v Jarné MVC t.j. @ModelAttribute.

Samozrejme, jarné MVC je komplexná téma s mnohými vecami, ktoré musíte pochopiť, aby ste ju využili naplno, takže sa tu určite pohnite hlbšie.

2. Model

Najprv - definujme jednoduchá entita že budeme zobrazovať a viazať sa na formulár:

public class Employee {private String name; súkromné ​​dlhé ID; private String contactNumber; // štandardné getre a setre}

Toto bude náš objekt podporujúci formu.

3. Pohľad

Ďalej - definujeme skutočná formaa samozrejme súbor HTML, ktorý ho obsahuje. Budeme používať stránku, kde je vytvorený / zaregistrovaný nový zamestnanec:

Vitajte, zadajte podrobnosti o zamestnancovi

názov
Id
Kontaktné číslo

Najprv - všimnite si, že na našu stránku JSP začleňujeme knižnicu značiek - formulár taglib - na pomoc s definovaním nášho formulára.

Ďalej - značka tu hrá dôležitú úlohu; je to veľmi podobné bežnému protokolu HTLM značka, ale modelAttribute Atribút je kľúč, ktorý určuje názov modelového objektu, ktorý podporuje tento formulár:

To bude zodpovedať @ModelAttribute neskôr v ovládači.

Ďalej - každé vstupné pole používa ešte ďalší užitočný tag z jarného formulára taglib - forma: predpona. Každé z týchto polí špecifikuje a cesta atribút - to musí zodpovedať zakladateľovi / nastavovateľovi atribútu modelu (v tomto prípade triedy Employee). Po načítaní stránky sa vstupné polia vyplnia pružinou, ktorá zavolá geter každého poľa viazaného na vstupné pole. Po odoslaní formulára sú volaní nastavovatelia, aby uložili hodnoty formulára do objektu.

Konečne - kedy formulár sa podáva, je vyvolaná obslužná rutina POST v radiči a formulár je automaticky viazaný na zamestnanec argument, ktorý sme odovzdali.

4. Prevádzkovateľ

Teraz sa pozrime na kontrolór to zvládne zadný koniec:

@Controller public class EmployeeController {@RequestMapping (value = "/ employee", method = RequestMethod.GET) public ModelAndView showForm () {return new ModelAndView ("employeeHome", "employee", new Employee ()); } @RequestMapping (value = "/ addEmployee", method = RequestMethod.POST) public String submit (@Valid @ModelAttribute ("employee") zamestnanec zamestnanec, výsledok BindingResult, model ModelMap) {if (result.hasErrors ()) {návrat "chyba"; } model.addAttribute ("meno", employee.getName ()); model.addAttribute ("contactNumber", employee.getContactNumber ()); model.addAttribute ("id", employee.getId ()); vrátiť "employeeView"; }}

Kontrolór definuje dve jednoduché operácie - GET na zobrazenie údajov vo formulári a POST pre operáciu vytvorenia prostredníctvom odoslania formulára.

Upozorňujeme tiež, že ak do modelu nie je pridaný objekt „zamestnanec“, Spring by sa sťažovala, keď sa pokúsime získať prístup k JSP, pretože JSP bude nastavený tak, aby viazal formulár na atribút modelu „zamestnanec“:

java.lang.IllegalStateException: Ani BindingResult, ani obyčajný cieľový objekt pre názov fazule „zamestnanec“ nie je k dispozícii ako atribút požiadavky v o.s.w.s.s.BindStatus. (BindStatus.java:141) 

Pre prístup k nášmu podpornému objektu formulára ho musíme vložiť cez @ModelAttribute anotácia.

An @ModelAttribute na argumente metódy naznačuje, že argument sa získa z modelu. Ak v modeli nie je, argument sa najskôr vytvorí inštanciou a potom sa pridá do modelu.

5. Zaobchádzanie s chybami väzieb

V predvolenom nastavení Spring MVC hodí výnimku, keď sa vyskytnú chyby počas viazania požiadavky. To zvyčajne nie je to, čo chceme, namiesto toho by sme mali tieto chyby zobrazovať používateľovi. Použijeme a BindingResult pridaním jedného ako argumentu do našej metódy ovládača:

public String submit (@Valid @ModelAttribute ("zamestnanec") zamestnanec zamestnanec, výsledok BindingResult, model ModelMap)

The BindingResult Argument je potrebné umiestniť hneď za objekt podporujúci formulár - je to jeden z mála prípadov, keď záleží na poradí argumentov metódy. V opačnom prípade narazíme na nasledujúcu výnimku:

java.lang.IllegalStateException: Argument Errors / BindingResult deklarovaný bez predchádzajúceho atribútu modelu. Skontrolujte svoj podpis metódy handlera!

Teraz - výnimka sa už nehádže; namiesto toho budú chyby zaregistrované na serveri BindingResult ktorá sa odovzdáva Predložiť metóda. V tomto okamihu môžeme tieto chyby spracovať rôznymi spôsobmi - napríklad operáciu je možné zrušiť:

@RequestMapping (value = "/ addEmployee", method = RequestMethod.POST) public String submit (@Valid @ModelAttribute ("employee") zamestnanec zamestnanec, výsledok BindingResult, ModelMap model) {if (result.hasErrors ()) {return " chyba"; } // Urob niečo, vráti „employeeView“; }

Všimnite si, ako v prípade, že výsledok obsahuje chyby, vraciame používateľovi iný pohľad, aby sa tieto chyby zobrazili správne. Poďme sa na tento pohľad pozrieť - error.jsp:

Zadajte správne podrobnosti

Skúsiť znova

6. Zobrazenie zamestnanca

Nakoniec okrem vytvorenia nového zamestnanca môžeme tiež jednoducho zobraziť jedného - tu je kód na rýchle zobrazenie:

Zadané informácie o zamestnancovi

Názov :$ {name}
ID:$ {id}
Kontaktné číslo :$ {contactNumber}

Stránka JSP jednoducho používa výrazy EL na zobrazenie hodnôt vlastností objektu Employee v modeli.

7. Testovanie aplikácie

Jednoduchú aplikáciu je možné nasadiť - napríklad na server Tomcat - a pristupovať k nej lokálne:

// localhost: 8080 / spring-mvc-xml / zamestnanec

Toto je pohľad obsahujúci hlavný formulár - pred operáciou odoslania:

Príklad jarného formulára MVC - odoslať

Po odoslaní sa zobrazia údaje:

Príklad jarného formulára MVC - Zobraziť

A to je všetko - pracovný príklad jednoduchého formulára s jarným MVC s overením.

Implementáciu tohto jarného MVC tutoriálu nájdete v projekte GitHub - jedná sa o projekt založený na Maven, takže by malo byť ľahké ho importovať a spustiť tak, ako je.

Nakoniec, ako som hovoril hneď na začiatku článku, určite by ste sa mali hlbšie venovať jarnej MVC.


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