Udforsk SpringMVC's Form Tag Library

1. Oversigt

I den første artikel i denne serie introducerede vi brugen af ​​form-tag-biblioteket og hvordan man binder data til en controller.

I denne artikel dækker vi de forskellige tags, som Spring MVC giver for at hjælpe os oprette og validere formularer.

2. Den input Tag

Vi kommer i gang med input tag. Dette tag gengiver en HTML input tag ved hjælp af den bundne værdi og type = 'tekst' som standard:

Fra og med foråret 3.1 kan du bruge andre HTML5-specifikke typer, såsom e-mail, dato og andre. For eksempel, hvis vi ønskede at oprette et e-mail-felt, kan vi bruge det type = 'e-mail':

På samme måde kan vi bruge til at oprette et datofelt type = 'dato', som gengiver en datovælger i mange browsere, der er kompatible med HTML5:

3. Den adgangskode Tag

Dette tag gengiver en HTML input tag med type = 'adgangskode' ved hjælp af den bundne værdi. Denne HTML-input maskerer den indtastede værdi i feltet:

4. Den tekstområde Tag

Dette tag gengiver en HTML tekstområde:

Vi kan specificere antallet af rækker og kolonner på samme måde som vi ville have en HTML tekstområde.

5. Den afkrydsningsfelt og afkrydsningsfelter Tag

Det afkrydsningsfelt tag gengiver en HTML input tag med type = 'afkrydsningsfelt'. Spring MVC's formtag-bibliotek giver forskellige tilgange til afkrydsningsfelt tag, der skal opfylde alle vores afkrydsningsfelt behov:

Ovenstående eksempel genererer en klassisk single afkrydsningsfelt, med en boolsk værdi. Hvis vi indstiller den bundne værdi til rigtigt, dette afkrydsningsfelt vil blive markeret som standard.

I følgende eksempel genereres flere afkrydsningsfelter. I dette tilfælde er afkrydsningsfelt værdier er hårdkodede inde på JSP-siden:

Fugleture: Astronomi: Snowboarding: 

Her er den bundne værdi af typen array eller java.util.Collection:

String [] hobbyer;

Formålet med afkrydsningsfelter tag bruges til at gengive flere afkrydsningsfelter, hvor afkrydsningsfeltets værdier genereres ved kørsel:

For at generere de værdier, vi overfører i en Array, a Liste eller a Kort der indeholder de tilgængelige indstillinger i genstande ejendom. Vi kan initialisere vores værdier inde i controlleren:

Liste favouriteLanguageItem = ny ArrayList (); favouriteLanguageItem.add ("Java"); favouriteLanguageItem.add ("C ++"); favouriteLanguageItem.add ("Perl");

Typisk er den bundne egenskab en samling, så den kan indeholde flere værdier valgt af brugeren:

Liste favoritLanguage;

6. Den Radio knap og radioknapper Tag

Dette tag gengiver en HTML input tag med type = 'radio':

Mand kvinde: 

Et typisk brugsmønster involverer flere tagforekomster med forskellige værdier bundet til den samme egenskab:

privat String sex;

Ligesom afkrydsningsfelter tag, den radioknapper tag gengiver flere HTML input tags med type = 'radio':

I dette tilfælde vil vi måske videregive de tilgængelige muligheder som en Array, a Liste eller a Kort der indeholder de tilgængelige indstillinger i genstande ejendom:

Liste jobItem = ny ArrayList (); jobItem.add ("Fuld tid"); jobItem.add ("Deltid");

7. Den Vælg Tag

Dette tag gengiver en HTML Vælg element:

For at generere de værdier, vi overfører i en Array, a Liste eller a Kort der indeholder de tilgængelige indstillinger i genstande ejendom. Endnu en gang kan vi initialisere vores værdier inde i controlleren:

Kort countryItems = ny LinkedHashMap (); countryItems.put ("USA", "USA"); countryItems.put ("IT", "Italien"); countryItems.put ("UK", "Storbritannien"); countryItems.put ("FR", "Frankrig");

Select-tag understøtter også brugen af ​​indlejrede mulighed og muligheder tags.

Mens mulighed tag gengiver en enkelt HTML mulighed, det muligheder tag gengiver en liste med HTML mulighed tags.

Det muligheder tag tager en Array, a Liste eller a Kort der indeholder de tilgængelige indstillinger i genstande ejendom, ligesom Vælg tag:

Når vi har behov for at vælge flere emner på én gang, kan vi oprette en flere lister. For at gengive denne type liste skal du blot tilføje multiple = ”sand” attribut i Vælg tag.

Her er den bundne ejendom en array eller a java.util.Collection:

Liste frugt;

8. Den skjult Tag

Dette tag gengiver en HTML input tag med type = 'skjult' ved hjælp af den bundne værdi:

9. Den Fejl Tag

Feltfejlmeddelelser genereres af validatorer tilknyttet controlleren. Vi kan bruge fejltagelsen til at gengive disse feltfejlmeddelelser:

Dette viser fejl for det felt, der er angivet i sti ejendom. Fejlmeddelelserne gengives inden for en spændvidde tag som standard med .fejl vedhæftet til sti værdi som idog eventuelt en CSS-klasse fra cssClass egenskab, som kan bruges til at style output:

Navn kræves!

At omslutte fejlmeddelelserne med et andet element i stedet for standardindstillingen spændvidde tag, kan vi specificere det foretrukne element inde i element attribut:

Dette gengiver fejlmeddelelserne inden for en div element:

 Navn kræves! 

Ud over at have evnen til at vise fejl for et specifikt inputelement, kan vi vise hele listen over fejl (uanset felt) for en given side. Dette opnås ved brug af jokertegnet *:

9.1. Validatoren

For at vise fejl for et givet felt skal vi definere en validator:

offentlig klasse PersonValidator implementerer Validator {@Override public boolean supports (Class clazz) {return Person.class.isAssignableFrom (clazz); } @ Override offentlig ugyldig validering (Objekt obj, Fejlfejl) {ValidationUtils.rejectIfEmptyOrWhitespace (fejl, "navn", "krævet.navn"); }}

I dette tilfælde, hvis feltet navn er tom, returnerer validatoren den fejlmeddelelse, der er identificeret ved krævet.navn fra ressourcebunten.

Ressourcebunten er defineret i foråret XML konfigurationsfil som følger:

Eller i en ren Java-konfigurationsstil:

@Bean public MessageSource messageSource () {ResourceBundleMessageSource messageSource = ny ResourceBundleMessageSource (); messageSource.setBasenames ("beskeder"); returnere beskedKilde; }

Fejlmeddelelsen er defineret inde i beskeder. ejendomme fil:

required.name = Navn er påkrævet!

For at anvende denne validering skal vi medtage en henvisning til validatoren i vores controller og kalde metoden valider i controller-metoden, som kaldes, når brugeren sender formularen:

@RequestMapping (værdi = "/ addPerson", metode = RequestMethod.POST) offentlig strengindsendelse (@ModelAttribute ("person") Person person, BindingResult resultat, ModelMap modelMap) {validator.validate (person, resultat); if (result.hasErrors ()) {returner "personForm"; } modelMap.addAttribute ("person", person); returner "personView"; }

9.2. JSR 303 Validering af bønner

Fra foråret 3 kan vi bruge JSR 303 (via @Gyldig annotation) til validering af bønner. For at gøre dette har vi brug for en JSR303 validator-ramme på klassestien. Vi bruger Dvaletilstand (referenceimplementeringen). Følgende er den afhængighed, som vi skal medtage i POM:

 org. dvale-dvale-validator 5.1.1.Final 

For at gøre Spring MVC support til JSR 303-validering via @Gyldig bemærkning, vi skal aktivere følgende i vores Spring-konfigurationsfil:

Eller brug den tilsvarende kommentar @EnableWebMvc i en Java-konfiguration:

@EnableWebMvc @ Configuration offentlig klasse ClientWebConfigJava implementerer WebMvcConfigurer {// Al webkonfiguration går her}

Dernæst skal vi kommentere den controller-metode, som vi vil validere med @Gyldig kommentar:

@RequestMapping (værdi = "/ addPerson", metode = RequestMethod.POST) offentlig streng indsende (@Valid @ModelAttribute ("person") Person person, BindingResult resultat, ModelMap modelMap) {if (result.hasErrors ()) {return " personForm "; } modelMap.addAttribute ("person", person); returner "personView"; }

Nu kan vi kommentere enhedens ejendom for at validere den med Hibernate validator-kommentar:

@NotEmpty privat strengadgangskode;

Som standard vises denne kommentar “Må ikke være tom” hvis vi lader indtastningsfeltet for kodeord være tomt.

Vi kan tilsidesætte standardfejlmeddelelsen ved at oprette en egenskab i ressourcegruppen defineret i valideringseksemplet. Meddelelsens nøgle følger reglen AnnotationName.entity.fieldname:

NotEmpty.person.password = Adgangskode er påkrævet!

10. Konklusion

I denne vejledning undersøgte vi de forskellige tags, som Spring giver til at arbejde med formularer.

Vi kiggede også på koden for visning af valideringsfejl og den nødvendige konfiguration til at vise brugerdefinerede fejlmeddelelser.

Alle eksemplerne ovenfor kan findes i et GitHub-projekt. Dette er et Eclipse-baseret projekt, så det skal være let at importere og køre som det er.

Når projektet kører lokalt, kan du få adgang til formulareksemplet på:

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


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