Våren MVC og @ModelAttribute-merknaden

1. Oversikt

En av de viktigste Spring-MVC-merknadene er @ModelAttribute-merknaden.

De @ModelAttribute er en kommentar som binder en metodeparameter eller metodenes returverdi til et navngitt modellattributt og deretter eksponerer det for en webvisning.

I det følgende eksemplet vil vi demonstrere brukervennligheten og funksjonaliteten til merknaden, gjennom et felles konsept: et skjema sendt fra selskapets ansatt.

2. Den @ModelAttribute i dybde

Som det innledende avsnittet avslørte, @ModelAttribute kan brukes enten som en metodeparameter eller på metodenivå.

2.1 På metodenivå

Når merknaden brukes på metodenivå, indikerer den at metoden er å legge til ett eller flere modellattributter. Slike metoder støtter de samme argumenttypene som @RequestMapping-metoder, men som ikke kan tilordnes direkte til forespørsler.

La oss se på et raskt eksempel her for å forstå hvordan dette fungerer:

@ModelAttribute public void addAttributes (Model model) {model.addAttribute ("msg", "Velkommen til Nederland!"); } 

I eksemplet viser vi en metode som legger til et attributt som heter msg til alle modeller definert i kontrollerklassen.

Selvfølgelig vil vi se dette i aksjon senere i artikkelen.

Generelt vil Spring-MVC alltid ringe først til den metoden, før den kaller noen behandlingsmetoder. Det er, @ModelAttribute metoder påkalles før kontrollermetodene er merket med @RequestMapping blir påkalt. Logikken bak sekvensen er at modellobjektet må opprettes før noen behandling starter inne i kontrollermetodene.

Det er også viktig at du kommenterer den respektive klassen som @ControllerAdvice. Dermed kan du legge til verdier i Modell som vil bli identifisert som global. Dette betyr faktisk at for hver forespørsel eksisterer en standardverdi, for hver metode i svardelen.

2.2 Som metodeargument

Når det brukes som et metodeargument, indikerer det at argumentet skal hentes fra modellen. Når den ikke er tilstede, bør den først instantieres og deretter legges til modellen, og når den er tilstede i modellen, skal argumentfeltene fylles ut fra alle forespørselsparametere som har samsvarende navn.

I kodebiten som følger ansatt modellattributt er fylt med data fra et skjema sendt til addMedarbeider endepunkt. Spring MVC gjør dette bak kulissene før de påkaller innleveringsmetoden:

@RequestMapping (verdi = "/ addMedarbeider", metode = RequestMethod.POST) offentlig strenginnlevering (@ModelAttribute ("ansatt") Ansatt ansatt) {// Kode som bruker ansattes gjenstand returnerer "medarbeidervisning"; }

Senere i denne artikkelen vil vi se et komplett eksempel på hvordan du bruker ansatt motsette seg å fylle ut ansattVis mal.

Så det binder skjemadataene med en bønne. Kontrolleren kommentert med @RequestMapping kan ha tilpassede klasseargument (er) kommentert med @ModelAttribute.

Dette er det som ofte kalles databinding i Spring-MVC, en vanlig mekanisme som sparer deg for å måtte analysere hvert skjemafelt individuelt.

3. Skjemaeksempel

I denne delen vil vi gi eksemplet det er referert til i oversiktsseksjonen: et veldig grunnleggende skjema som ber en bruker (ansatt i et selskap, i vårt spesifikke eksempel), om å legge inn personlig informasjon (spesielt Navn og id). Etter at innsendingen er fullført og uten feil, forventer brukeren å se de tidligere innsendte dataene, vist på et annet skjermbilde.

3.1 Utsikten

La oss først lage et enkelt skjema med ID- og navnefelt:

 Navn ID 

3.2 Kontrolleren

Her er kontrollerklassen, der logikken for ovennevnte visning implementeres:

@Controller @ControllerAdvice offentlig klasse EmployeeController {private Map employeeMap = new HashMap (); @RequestMapping (verdi = "/ addMedarbeider", metode = RequestMethod.POST) offentlig strenginnsendelse (@ModelAttribute ("ansatt") Ansattes ansatt, BindingResult-resultat, ModelMap-modell) {if (result.hasErrors ()) {return "error" ; } modell.addAttribute ("navn", ansatt.getnavn ()); model.addAttribute ("id", medarbeider.getId ()); ansatteMap.put (ansatt.getId (), ansatt); returner "medarbeidervisning"; } @ModelAttribute public void addAttributes (Model model) {model.addAttribute ("msg", "Velkommen til Nederland!"); }}

I sende inn() metoden vi har en Ansatt objekt bundet til vårt Utsikt. Kan du se kraften i denne kommentaren? Du kan kartlegge skjemafeltene dine til en objektmodell så enkelt som det. I metoden henter vi verdier fra skjemaet og setter dem til ModelMap.

Til slutt kommer vi tilbake ansattVis, som betyr at den respektive JSP-filen skal kalles som en Utsikt representant.

Videre er det også en addAttributes () metode. Hensikten er å legge til verdier i Modell som vil bli identifisert globalt. Det vil si at en standardverdi returneres som svar for hver forespørsel til hver kontrolleremetode. Vi må også kommentere den spesifikke klassen som @ControllerAdvice.

3.3 Modellen

Som nevnt før, Modell objektet er veldig forenklet og inneholder alt som kreves av "front-end" -attributtene. La oss nå se på et eksempel:

@XmlRootElement offentlig klasse ansatt {privat lang id; privat strengnavn; offentlig ansatt (lang id, strengnavn) {this.id = id; this.name = navn; } // standard getters og setter fjernet}

3.4 Pakk opp

De @ControllerAdvice bistår en kontroller og spesielt, @ModelAttribute metoder som gjelder for alle @RequestMapping metoder. Selvfølgelig, vår addAttributes () metoden vil være den aller første som kjører før resten av @RequestMapping metoder.

Med det i bakhodet og etter begge deler sende inn() og addAttributes () kjøres, kan vi bare henvise til dem i Utsikt returnerte fra Kontroller klasse, ved å nevne fornavnet i en dollarisert krøllete bukseseler-duo, som for eksempel $ {name}.

3.5 Resultatvisning

La oss nå skrive ut det vi mottok fra skjemaet:

$ {msg}

Navn: $ {name} ID: $ {id}

4. Konklusjon

I denne opplæringen undersøkte vi bruken av @ModelAttribute kommentar, for både metodeargumenter og brukssaker på metodenivå.

Implementeringen av denne enkle veiledningen finner du i github-prosjektet.


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