Utforsk SpringMVCs Form Tag Library

1. Oversikt

I den første artikkelen i denne serien introduserte vi bruken av skjema-tag-biblioteket og hvordan man binder data til en kontroller.

I denne artikkelen vil vi dekke de forskjellige kodene som Spring MVC tilbyr for å hjelpe oss opprette og validere skjemaer.

2. Den inngang stikkord

Vi kommer i gang med inngang stikkord. Denne koden gjengir en HTML inngang tag ved hjelp av den innbundne verdien og type = 'tekst' som standard:

Fra og med våren 3.1 kan du bruke andre HTML5-spesifikke typer, for eksempel e-post, dato og andre. For eksempel, hvis vi ønsket å opprette et e-postfelt, kan vi bruke det type = 'e-post':

På samme måte kan vi bruke for å opprette et datofelt type = 'dato', som gjengir en datovelger i mange nettlesere som er kompatible med HTML5:

3. Den passord stikkord

Denne koden gjengir en HTML inngang tag med type = 'passord' bruker den bundne verdien. Denne HTML-inngangen maskerer verdien som er skrevet inn i feltet:

4. Den tekstområde stikkord

Denne koden gjengir en HTML tekstområde:

Vi kan spesifisere antall rader og kolonner på samme måte som vi ville ha en HTML tekstområde.

5. Den avkrysningsruten og avkrysningsruter stikkord

De avkrysningsruten tag gjengir en HTML inngang tag med type = 'avkrysningsrute'. Spring MVCs skjema-tagbibliotek gir forskjellige tilnærminger til avkrysningsruten tag som skal oppfylle alle våre avkrysningsruten behov:

Ovenstående eksempel genererer en klassisk singel avkrysningsruten, med en boolsk verdi. Hvis vi setter den bundne verdien til ekte, vil denne avkrysningsboksen være merket av som standard.

Følgende eksempel genererer flere avkrysningsruter. I dette tilfellet avkrysningsruten verdiene er hardkodet på JSP-siden:

Fugletitting: Astronomi: Snowboarding: 

Her er den innbundne verdien av typen array eller java.util.Collection:

String [] hobbyer;

Formålet med avkrysningsruter tag brukes til å gjengi flere avkrysningsruter, der avkrysningsverdiene genereres ved kjøretid:

For å generere verdiene vi overfører i en Array, a Liste eller a Kart som inneholder tilgjengelige alternativer i gjenstander eiendom. Vi kan initialisere verdiene våre inne i kontrolleren:

List favouriteLanguageItem = new ArrayList (); favouriteLanguageItem.add ("Java"); favouriteLanguageItem.add ("C ++"); favouriteLanguageItem.add ("Perl");

Vanligvis er den bundne egenskapen en samling slik at den kan inneholde flere verdier valgt av brukeren:

Liste favorittLanguage;

6. Den radioknapp og radioknapper stikkord

Denne koden gjengir en HTML inngang tag med type = 'radio':

Mann Kvinne: 

Et typisk bruksmønster vil involvere flere tagforekomster med forskjellige verdier bundet til samme eiendom:

privat String sex;

Akkurat som avkrysningsruter tag, den radioknapper tag gjengir flere HTML inngang tagger med type = 'radio':

I dette tilfellet vil vi kanskje gi de tilgjengelige alternativene som en Array, a Liste eller a Kart inneholder de tilgjengelige alternativene i gjenstander eiendom:

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

7. Den å velge stikkord

Denne koden gjengir en HTML å velge element:

For å generere verdiene vi overfører i en Array, a Liste eller a Kart som inneholder tilgjengelige alternativer i gjenstander eiendom. Nok en gang kan vi initialisere verdiene våre inne i kontrolleren:

Map countryItems = new LinkedHashMap (); countryItems.put ("USA", "USA"); countryItems.put ("IT", "Italia"); countryItems.put ("UK", "Storbritannia"); countryItems.put ("FR", "Frankrike");

Select tag støtter også bruk av nestede alternativ og alternativer koder.

Mens alternativ tag gjengir en enkelt HTML alternativ, den alternativer tag gjengir en liste med HTML alternativ koder.

De alternativer tag tar en Array, a Liste eller a Kart inneholder de tilgjengelige alternativene i gjenstander eiendom, akkurat som å velge stikkord:

Når vi har behov for å velge flere elementer på en gang, kan vi opprette en flere listebokser. For å gjengi denne typen liste er det bare å legge til multiple = ”true” attributt i å velge stikkord.

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

Liste frukt;

8. Den skjult stikkord

Denne koden gjengir en HTML inngang tag med type = 'skjult' bruker den bundne verdien:

9. The Feil stikkord

Feltfeilmeldinger genereres av validatorer tilknyttet kontrolleren. Vi kan bruke The Errors Tag for å gjengi feltfeilmeldingene:

Dette vil vise feil for feltet spesifisert i sti eiendom. Feilmeldingene blir gjengitt i en span tag som standard, med .feil vedlagt til sti verdi som id, og eventuelt en CSS-klasse fra cssClass egenskap, som kan brukes til å style utdataene:

Navn kreves!

Å legge ved feilmeldingene med et annet element i stedet for standard span kan vi spesifisere det foretrukne elementet i element Egenskap:

Dette gjengir feilmeldingene i a div element:

 Navn kreves! 

I tillegg til å ha muligheten til å vise feil for et bestemt inngangselement, kan vi vise hele listen over feil (uansett felt) for en gitt side. Dette oppnås ved bruk av jokertegnet *:

9.1. Validatoren

For å vise feil for et gitt felt må vi definere en validator:

offentlig klasse PersonValidator implementerer Validator {@Override public boolean supports (Class clazz) {return Person.class.isAssignableFrom (clazz); } @ Override public void validate (Objekt obj, Feil feil) {ValidationUtils.rejectIfEmptyOrWhitespace (feil, "navn", "required.name"); }}

I dette tilfellet, hvis feltet Navn er tom, returnerer validatoren feilmeldingen identifisert av required.name fra ressurspakken.

Ressurspakken er definert på våren XML konfigurasjonsfilen som følger:

Eller i en ren Java-konfigurasjonsstil:

@Bean offentlig MessageSource messageSource () {ResourceBundleMessageSource messageSource = ny ResourceBundleMessageSource (); messageSource.setBasenames ("meldinger"); returmeldingKilde; }

Feilmeldingen er definert inne i meldinger. eiendommer fil:

required.name = Navn er obligatorisk!

For å bruke denne valideringen, må vi inkludere en referanse til validatoren i kontrolleren vår og ringe metoden validere i kontrollermetoden som kalles når brukeren sender inn skjemaet:

@RequestMapping (value = "/ addPerson", method = RequestMethod.POST) public String submit (@ModelAttribute ("person") Person person, BindingResult result, ModelMap modelMap) {validator.validate (person, result); if (result.hasErrors ()) {return "personForm"; } modelMap.addAttribute ("person", person); returner "personView"; }

9.2. JSR 303 Validering av bønner

Fra og med våren 3 kan vi bruke JSR 303 (via @Gyldig merknad) for validering av bønner. For å gjøre dette trenger vi en JSR303 validator framework på klassestien. Vi vil bruke Dvalemodus (referanseimplementeringen). Følgende er avhengigheten vi trenger å inkludere i POM:

 org.hibernate hibernate-validator 5.1.1.Final 

For å gjøre vår MVC-støtte JSR 303-validering via @Gyldig merknad, må vi aktivere følgende i vårkonfigurasjonsfilen:

Eller bruk den tilsvarende kommentaren @EnableWebMvc i en Java-konfigurasjon:

@EnableWebMvc @Configuration offentlig klasse ClientWebConfigJava implementerer WebMvcConfigurer {// All webkonfigurasjon vil gå her}

Deretter må vi kommentere kontrollermetoden som vi vil validere med @Gyldig kommentar:

@RequestMapping (value = "/ addPerson", method = RequestMethod.POST) public String submit (@Valid @ModelAttribute ("person") Person person, BindingResult result, ModelMap modelMap) {if (result.hasErrors ()) {return " personForm "; } modelMap.addAttribute ("person", person); returner "personView"; }

Nå kan vi kommentere enhetens eiendom for å validere den med Hibernate validator-kommentar:

@NotEmpty privat strengpassord;

Som standard vises denne merknaden “Kan ikke være tomt” hvis vi lar passordinntastingsfeltet være tomt.

Vi kan overstyre standardfeilmeldingen ved å opprette en eiendom i ressurspakken definert i validatoreksemplet. Nøkkelen til meldingen følger regelen AnnotationName.entity.fieldname:

NotEmpty.person.password = Passord kreves!

10. Konklusjon

I denne veiledningen utforsket vi de forskjellige kodene som Spring gir for å jobbe med skjemaer.

Vi så også på merkelappen for validering av feilvisning og konfigurasjonen som trengs for å vise tilpassede feilmeldinger.

Alle eksemplene ovenfor kan bli funnet i et GitHub-prosjekt. Dette er et formørkelsesbasert prosjekt, så det skal være enkelt å importere og kjøre som det er.

Når prosjektet kjører lokalt, kan du få tilgang til skjemaeksemplet på:

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


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