Kom godt i gang med formularer i foråret MVC
1. Oversigt
I denne artikel vil vi diskutere forårsformularer og databinding til en controller. Vi vil også se på en af de vigtigste kommentarer i Forår MVC dvs. @ModelAttribute.
Selvfølgelig er Spring MVC et komplekst emne med masser af ting, du skal forstå for at bruge det til sit fulde potentiale, så gå helt sikkert dybere ned i rammen her.
2. Modellen
Først - lad os definere en simpel enhed at vi skal vise og binde til formularen:
offentlig klassemedarbejder {privat strengnavn; privat lang id; private String contactNumber; // standard getters og setter}
Dette vil være vores form-backing objekt.
3. Udsigten
Næste - lad os definere den faktiske formog selvfølgelig HTML-filen, der indeholder den. Vi bruger en side, hvor en ny medarbejder oprettes / registreres:
Velkommen, indtast medarbejderoplysningerne
Navn Id Kontakt nummer
Først - bemærk, at vi inkluderer et tagbibliotek på vores JSP-side - the form taglib - for at hjælpe med at definere vores formular.
Næste - den tag spiller en vigtig rolle her; det ligner meget den almindelige HTLM tag men modelAttribute attribut er nøglen, der angiver et navn på det modelobjekt, der bakker denne formular:
Dette svarer til @ModelAttribute senere i controlleren.
Dernæst - hvert inputfelt bruger endnu et nyttigt tag fra Spring Form taglib - form: præfiks. Hvert af disse felter specificerer -en sti attribut - dette skal svare til en getter / setter af modelattributten (i dette tilfælde medarbejderklassen). Når siden er indlæst, udfyldes inputfelterne af Spring, som kalder getterne for hvert felt bundet til et inputfelt. Når formularen sendes, kaldes setterne for at gemme formularens værdier til objektet.
Endelig - hvornår formularen indsendes, kaldes POST-handleren i controlleren, og formularen er automatisk bundet til medarbejder argument, som vi passerede ind.
4. Controlleren
Lad os nu se på controlleren der skal håndtere bagenden:
@Controller offentlig klasse EmployeeController {@RequestMapping (værdi = "/ medarbejder", metode = RequestMethod.GET) offentlig ModelAndView showForm () {returner ny ModelAndView ("medarbejderHome", "medarbejder", ny medarbejder ()); } @RequestMapping (værdi = "/ addEmployee", metode = RequestMethod.POST) offentlig strengindsendelse (@Valid @ModelAttribute ("medarbejder") Medarbejdermedarbejder, BindingResult-resultat, ModelMap-model) {if (result.hasErrors ()) {return "fejl"; } model.addAttribute ("navn", medarbejder.getnavn ()); model.addAttribute ("contactNumber", medarbejder.getContactNumber ()); model.addAttribute ("id", medarbejder.getId ()); returner "medarbejdervisning"; }}
Controlleren definerer to enkle operationer - GET til visning af data i formularen og POST til oprettelsesoperationen via formularens indsendelse.
Bemærk også, at hvis objektet kaldet "medarbejder" ikke føjes til modellen, vil Spring klage, når vi prøver at få adgang til JSP, fordi JSP vil blive indstillet til at binde formularen til "medarbejder" -modelattributten:
java.lang.IllegalStateException: Hverken BindingResult eller almindeligt målobjekt til bønnenavn 'medarbejder' tilgængelig som anmodningsattribut på o.s.w.s.s.BindStatus. (BindStatus.java:141)
For at få adgang til vores formularbaggrundsobjekt skal vi indsprøjte det via @ModelAttribute kommentar.
En @ModelAttribute
på et metodeargument angiver, at argumentet vil blive hentet fra modellen. Hvis det ikke er til stede i modellen, vil argumentet blive instantieret først og derefter tilføjet til modellen.
5. Håndtering af bindingsfejl
Som standard kaster Spring MVC en undtagelse, når der opstår fejl under anmodning om binding. Dette er normalt ikke det, vi ønsker, i stedet skal vi præsentere disse fejl for brugeren. Vi skal bruge en Bindende resultat ved at tilføje en som et argument til vores controller-metode:
offentlig streng indsende (@Valid @ModelAttribute ("medarbejder") Medarbejdermedarbejder, BindingResult-resultat, ModelMap-model)
Det Bindende resultat argument skal placeres lige efter vores formstøtteobjekt - det er et af de sjældne tilfælde, hvor rækkefølgen af metodeargumenterne betyder noget. Ellers støder vi på følgende undtagelse:
java.lang.IllegalStateException: Errors / BindingResult-argument erklæret uden foregående modelattribut. Tjek din håndteringsmetodesignatur!
Nu - en undtagelse kastes ikke længere; i stedet registreres fejl på Bindende resultat der sendes til Indsend metode. På dette tidspunkt kan vi håndtere disse fejl på forskellige måder - for eksempel kan operationen annulleres:
@RequestMapping (værdi = "/ addEmployee", metode = RequestMethod.POST) offentlig streng indsende (@Valid @ModelAttribute ("medarbejder") Medarbejdermedarbejder, BindingResult-resultat, ModelMap-model) {if (result.hasErrors ()) {return " fejl"; } // Do Something returnerer "medarbejdervisning"; }
Bemærk hvordan, hvis resultatet indeholder fejl, returnerer vi en anden visning til brugeren for at få vist disse fejl korrekt. Lad os se på den opfattelse - fejl.jsp:
Indtast de korrekte detaljer
Prøve igen
6. Visning af en medarbejder
Endelig kan vi udover at oprette en ny medarbejder også blot vise en - her er koden til hurtig visning for det:
Indsendt medarbejderinformation
Navn: $ {navn} ID: $ {id} Kontakt nummer : $ {contactNumber}
JSP-siden bruger simpelthen EL-udtryk til at vise værdier for egenskaber for medarbejderobjektet i modellen.
7. Test af applikationen
Den enkle applikation kan implementeres - for eksempel på en Tomcat-server - og fås lokalt:
// localhost: 8080 / spring-mvc-xml / medarbejder
Dette er visningen, der indeholder hovedformularen - inden indsendelsen:

Spring MVC Form eksempel - Send
Efter indsendelsen vises dataene:

Spring MVC Form eksempel - Vis
Og det er det - et fungerende eksempel på en simpel form med Spring MVC med validering.
Implementeringen af denne Spring MVC-tutorial kan findes i GitHub-projektet - dette er et Maven-baseret projekt, så det skal være let at importere og køre som det er.
Endelig, som jeg sagde lige i begyndelsen af artiklen, skal du helt sikkert grave dybere ned i Spring MVC.