Az űrlapok használatának megkezdése a tavaszi MVC-ben

1. Áttekintés

Ebben a cikkben a tavaszi űrlapokat és az adatok vezérlőhöz való kötését tárgyaljuk. Ezenkívül megnézzük az egyik fő annotációt Tavaszi MVC azaz @ModelAttribute.

Természetesen a Spring MVC egy összetett téma, rengeteg dologgal, amelyet meg kell értenie ahhoz, hogy teljes mértékben kiaknázza, ezért mindenképpen mélyebbre ásson bele a keretrendszerbe.

2. A modell

Először - határozzuk meg egyszerű entitás hogy meg fogjuk jeleníteni az űrlapot és ehhez kötődni fogunk:

public class Alkalmazott {private String név; privát hosszú id; privát karakterlánc contactNumber; // szabványos mérőeszközök és beállítók}

Ez lesz a formát támogató objektumunk.

3. A nézet

Következő - definiáljuk a tényleges forma, és természetesen az azt tartalmazó HTML fájl. Olyan oldalt fogunk használni, ahol új alkalmazottat hoznak létre / regisztrálnak:

Üdvözöljük, adja meg az alkalmazottak adatait

Név
Id
Elérhetőség

Először - vegye észre, hogy egy címkekönyvtárat is felveszünk a JSP oldalunkra - forma taglib - hogy segítsen formánk meghatározásában.

Következő - a a címke itt fontos szerepet játszik; nagyon hasonlít a szokásos HTLM-re tag, de a modelAttribute attribútum az a kulcs, amely megadja annak a modellobjektumnak a nevét, amely támogatja ezt az űrlapot:

Ez megfelel a @ModelAttribute később a vezérlőben.

Következő - minden beviteli mező egy másik hasznos címkét használ a Spring Form taglib-ből - forma: előtag. Ezen mezők mindegyike meghatározza a pálya tulajdonság - ennek meg kell felelnie a modell attribútum getter / setter-jének (ebben az esetben az Employee osztálynak). Az oldal betöltésekor a beviteli mezőket Spring írja be, amely az egyes mezők getterét behívja egy bemeneti mezőhöz. Az űrlap benyújtásakor a beállítókat felkérik, hogy mentse az űrlap értékeit az objektumba.

Végül - mikor az űrlapot benyújtják, a vezérlőben lévő POST kezelő meghívásra kerül, és az űrlap automatikusan a munkavállaló érv, amelyet átadtunk.

4. A vezérlő

Most nézzük meg a Vezérlő ez fogja kezelni a hátulját:

@Controller public class EmployeeController {@RequestMapping (érték = "/ alkalmazott", módszer = RequestMethod.GET) nyilvános ModelAndView showForm () {return new ModelAndView ("alkalmazottHome", "alkalmazott", új alkalmazott ()); } @RequestMapping (value = "/ addEmployee", metódus = RequestMethod.POST) public String beküldése (@Valid @ModelAttribute ("alkalmazott") Alkalmazott alkalmazott, BindingResult eredmény, ModelMap modell) {if (result.hasErrors ()) {return "hiba"; } model.addAttribute ("név", worker.getName ()); model.addAttribute ("contactNumber", worker.getContactNumber ()); model.addAttribute ("id", worker.getId ()); return "workerView"; }}

A vezérlő két egyszerű műveletet határoz meg - a GET-et az adatok űrlapon történő megjelenítéséhez, és a POST-ot a létrehozási művelethez az űrlap beküldése útján.

Vegye figyelembe azt is, hogy ha az „alkalmazott” nevű objektum nem kerül hozzáadásra a modellhez, Spring panaszt fog tenni, amikor megpróbálunk hozzáférni a JSP-hez, mert a JSP-t úgy állítják be, hogy az űrlapot az „alkalmazotti” modell attribútumhoz kösse:

java.lang.IllegalStateException: Sem az BindingResult, sem a sima „alkalmazott” sima objektum nem érhető el kérelemattribútumként az o.s.w.s.s.BindStatus címen. (BindStatus.java:141) 

Az űrlaptámogató objektumhoz való hozzáféréshez be kell injektálnunk a @ModelAttribute annotáció.

An @ModelAttribute A method argumentum azt jelzi, hogy az argumentum lekérésre kerül a modellből. Ha nincs jelen a modellben, akkor az argumentum először példányos lesz, majd hozzáadódik a modellhez.

5. Kötési hibák kezelése

Alapértelmezés szerint a Spring MVC kivételt vet ki, ha hibák fordulnak elő a kérés-összerendelés során. Ez általában nem az, amit akarunk, ehelyett ezeket a hibákat kell bemutatnunk a felhasználónak. Használjuk a BindingResult hozzáadva egyet argumentumként a kontroller módszerünkhöz:

nyilvános karakterlánc beküldése (@Valid @ModelAttribute ("alkalmazott") Alkalmazott alkalmazott, BindingResult eredmény, ModelMap modell)

A BindingResult argumentumot közvetlenül az űrlaptámogató objektumunk után kell elhelyezni - ez az egyik ritka eset, amikor a metódus argumentumainak sorrendje számít. Ellenkező esetben a következő kivételt fogjuk tapasztalni:

java.lang.IllegalStateException: Errors / BindingResult argumentum deklarálva a modellattribútum megelözése nélkül. Ellenőrizze a kezelő módszer aláírását!

Most - egy kivételt már nem dobnak; ehelyett a rendszer regisztrálja a hibákat BindingResult hogy átadják a Beküldés módszer. Ezen a ponton ezeket a hibákat különféle módokon kezelhetjük - például a művelet törölhető:

@RequestMapping (value = "/ addEmployee", metódus = RequestMethod.POST) nyilvános karakterlánc beküldése (@Valid @ModelAttribute ("alkalmazott") Alkalmazott alkalmazott, BindingResult eredmény, ModelMap modell) {if (result.hasErrors ()) {return " hiba"; } // Csinálj valamit, adja vissza a "workerView" szót; }

Figyelje meg, hogy ha az eredmény hibákat tartalmaz, visszaküldünk egy másik nézetet a felhasználónak a hibák megfelelő megjelenítéséhez. Vessünk egy pillantást erre a nézetre - hiba.jsp:

Kérjük, adja meg a helyes adatokat

Próbálja újra

6. Alkalmazott megjelenítése

Végül egy új alkalmazott létrehozása mellett egyszerűen megjeleníthetünk egyet is - íme a gyors nézet kódja ehhez:

Beküldött munkavállalói információk

Név:$ {name}
Azonosító:$ {id}
Elérhetőség :$ {contactNumber}

A JSP oldal egyszerűen EL kifejezéseket használ az Employee objektum tulajdonságainak értékeinek megjelenítésére a modellben.

7. Az alkalmazás tesztelése

Az egyszerű alkalmazás telepíthető - például egy Tomcat szerveren -, és helyileg elérhető:

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

Ez a nézet tartalmazza a fő űrlapot - a beküldési művelet előtt:

Példa az MVC űrlapra - Küldés

A beküldés után az adatok megjelennek:

Példa az MVC űrlapra - nézet

És ez az - működő példa egy egyszerű űrlapra Spring MVC-vel, érvényesítéssel.

Ennek a tavaszi MVC oktatóanyagnak a megvalósítása megtalálható a GitHub projektben - ez egy Maven-alapú projekt, ezért könnyen importálhatónak és futtathatónak kell lennie.

Végül, amint a cikk elején mondtam, mindenképpen mélyebbre kell ásni a tavaszi MVC-ben.