Einführung
Annotationsüberprüfung mit Spring MVC kann die einfachen Daten des Ansichtsmodells direkt überprüfen. Beachten Sie, dass dies einfach ist. Wenn die Datenüberprüfung des Modells eine komplexere Geschäftslogik erfordert, ist es schwierig, Annotation zur Überprüfung zu verwenden.
Die folgende Annotationsüberprüfung unter Verwendung des Spring MVC sowie eines benutzerdefinierten Annotationsüberprüfungsbeispiels, das:
1. Support mehrsprachige (Internationalisierung)
2. Konvertieren Sie zuerst die Standarddaten. Wenn beispielsweise ein INT- und Datumstyp in einem leeren Wert übergeben wird, wird eine Ausnahme ausgelöst. Der Standardwert wird angegeben.
Schauen wir uns zuerst die Konfiguration an:
1. Web.xml
<? XSI: scheMalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app-app-app--app_3_30.xsd" 1 </display-name> <context-param> <param-name> contextconfigLocation </param-name> <param-value> classPath: Spring.xml </param-value> </context-param> <servlet> <servlet-name> Dispatcher </servlet-name> <Servlet-Class> org.springFramework.web.servlet.DispatcherServlet </Servlet-Class> <init-param> <param-name> contextconfigLocation </param-name> <param-teure> </param-value> </init-param> </load-on-startup> </lader-on-startup> </servlet-auf> startup> </last-on-startup <Servlet-name> Dispatcher </Servlet-Name> <URL-PATTERN>/</URL-PATTERN> </Servlet-Mapping> <Hörer> <Hörer-Klasse> org.springFramework.Web.Context.ContextLoaderListener </Hörer-Class> </Hörer> <Welcome-file-List> </Welcome-file> < </Welcome-File-List> </web-App>
Hier gibt es nichts zu sagen. Fügen Sie einfach die Konfiguration von Spring.xml zur ContextConfigLocation hinzu
2. Spring.xml
<? xmlns: tx = "http://www.springframework.org/schema/tx" xmlns: context = "http://www.springframework.org/schema/context" xmlns: mvc = "http://wwwwwwwwwwwwww./Mwus/m./wwwwwwww.Smwork" XSI: Schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springFramework.org/schema/mvc http:/www.Springframe.org/sschema/mvc/Spring-mvc-mvc-mving-mving-mvring-mving-mving-mving-mving-mvring-mvring-mvring-mvring-mvring-mvring-mvring-mvring-mvring-mvring-mvring-mvring-mvring-mvring/SCHEMA/SCHEMA/SCHEMA <!-Annotationsbeschreibung-> <Kontext: Annotation-Config /> <!-Standardannotationszuordning-Unterstützung-> <MVC: Annotationsgetriebene Validator = "Validator" Conversion-service = "ConversionService" /> <!-Convert-Class @Controller Annotation Annotation an der Bean-> <contexte: component-scanent-sances-package = com.m " /my"-> <contexte: component-scant-sances-package = com.m " /my"-> <contexte: component-scanse-packation <bean> <Eigenschaft name = "prefix" value = "/web-inf/views/"/> <Eigenschaft name = "suffix" value = ". jsp"/> <! <!-Ressourcendatei: Messages.Properties-> <bean id = "messusource"> <Eigenschaft name = "BasisNames"> <List> meldungen </value> </list> </property> </bean> <!-Verifier-> <bean id = "validator"> <Eigenschaft namens validationMessagesurce ". id = "ConversionService"> <Eigenschaft name = "konverters"> <list> <bean/> <bean/> </list> </property> </bean> </beans>
Fügen Sie Conversion-Service zu <MVC: Annotationsgetrieben/> hinzu und fügen Sie dann den System-Standardwandler zum Conversion-Service hinzu. Beispielsweise gibt es oben intConverter und DatEConverter. Natürlich kann es auch angepasst werden und andere Typen, was global ist.
Mehrsprachige Eigenschaften werden dem Validator Validator hinzugefügt. Natürlich basiert die mehrsprachige Sprache von Spring auf der Akzeptanzsprache des HTTP-Headers.
3. Controller
Paket com.my.controller; import java.util.list; import javax.validation.valid; import org. org.springframework.web.bind.annotation.modelattribute; import org.springframework.web.bind.annotation.RequestMapping; com.my.controller.bean.User4;@Controller@RequestMapping(value="av")public class TestAnnotationValidController { @RequestMapping public ModelAndView index() { ModelAndView view = new ModelAndView("/TestAnnotationValid/index", "user4", new User4()); Rückblick; } @RequestMapping (value = "/add", method = requestMethod.post) public modelAndView add (@modelAttribute @valid user4 user, BindingResult -Ergebnis) {modelAndView view = new modelAndView ("/testannotationValid/Index"); view.addObject ("user4", Benutzer); if (result.hasErrors ()) {list <Fielderror> errors = result.getFielderrors (); für (Fielderror err: fehler) {system.out.println ("ObjectName:" + err.getObjectName () + "/tfieldName:" + err.getField () + "/tfieldValue:" + err.getRejectedValue () + "/tmessage:" ERr.GetDefaultMessage () + "/tmessage:"; }} return view; }}Dies ist ein einfacher Controller. In Add gibt es eine Annotation von @Valid, die erforderlich ist, ohne dies hinzuzufügen
4. user4.java Model Entity Class
Paket com.my.controller.bean; import java.util.date; import Javax.validation.constraints.max; Import Javax.Validation.Constraints.min; javax.validation.constraints.Size; import org.hibernate.validator.constraints.email; import org.hibernate.validator.constraints.length; @Notblank (message = "{valid.name}") privater Zeichenfolge Name; @Length (min = 4, max = 20, message = "{valid.password}") privates Zeichenfolgenkennwort; @Notblank (message = "{valid.required}") @email (message = "{valid.email}") private String -E -Mail; @Notnull (message = "{valid.Required}") Private Boolean verheiratet; @Min (value = 18, message = "{valid.agemin}") @max (value = 100, message = "{valid.agemax}") private int age; @Notnull (message = "{valid.required}") @past (message = "{valid.birthday}") privates Datum Geburtstag; @Pattern (regexp = "^[a-za-z] {2,} $", message = "{valid.address}") private String-Adresse; @Size (min = 1, message = "{valid.likesmin}") private String [] Likes; @com.my.controller.validator.tel (Message = "{valid.tel}", min = 3) private String tel; public long getid () {return id; } public void setId (Long id) {this.id = id; } public String getName () {return name; } public void setName (String -Name) {this.name = name; } public String getPassword () {Kennwort zurückgeben; } public void setPassword (String -Passwort) {this.password = password; } public String getemail () {E -Mail zurückgeben; } public void setemail (String -E -Mail) {this.email = E -Mail; } public boolean isMarried () {return verheiratet; } public void setMarried (boolean verheiratet) {this.married = verheiratet; } public int getage () {return ay; } public void setage (int age) {this.age = älter; } public date getBirthday () {Return Birthday; } public void setBirthday (Datum Geburtstag) {this.birthday = Geburtstag; } public String getAddress () {Rückgabeadresse; } public void setAddress (String -Adresse) {this.address = address; } public String [] getLiKes () {return Likes; } public void setlikes (String [] Likes) {this.likes = Likes; } public String gettel () {return tel; } public void settel (String tel) {this.tel = tel; }}Abgesehen von @TEL sind die anderen alle Anmerkungen, die mit dem Frühling verbunden sind. Natürlich gibt es andere. Suchen Sie selbst danach.
5. Nachricht.Properties
valid.Required = Der Feldwert kann nicht leer sein. Seien Sie weniger als 1 gültig.
Der entsprechende Nachrichtenwert der Annotation des User4 -Modells. Wenn Sie eine internationale Mehrsprachigkeit benötigen, müssen Sie nur eine zusätzliche Datei mit dem Namen von messus_en_us.properties hinzufügen.
6. @tel
Paket com.my.controller.validator; import java.lang.annotation.elementtype; import Java.lang.annotation javax.validation.payload; @target ({elementtype.field, elementtype.method})@retention (retentionPolicy.runtime) @Constraint (validatedby = telvalidator.class) public @Interface tel {int min () Default 0; String message (); Klasse <?> [] Gruppen () Standard {}; Klasse <? Erweitert Payload> [] payload () Standard {};}Erstellen Sie eine neue Schnittstelle. Beachten Sie, dass die Annotationsschnittstelle Java so geschrieben ist: @Interface
Telvalidator:
Paket com.my.controller.validator; import javax.annotation.resource; import Javax.validation.ConstraintValidator; ConstraintValidator <tel, string> {@resource private ressourcebundLemessageSource messource; Privat Tel Tel; @Override public void initialize (tel tel) {this.tel = tel; } @Override public boolean isValid (String -Wert, ConstraintValidatorContext ConstraintContext) {boolean isvalid; if (value! = null && value.length ()> = tel.min ()) {isvalid = true; } else {isvalid = false; } if (! isvalid) {ConstraintContext.DisabledEfaultConstraintViolation (); ConstraintContext.BuildConstraintViolationWithTemplate (tel.message ()). } return isvalid; }}Dies ist die Verifizierungs -Implementierungsmethode von @Tel.
7. Konverter
Paket com.my.controller.converter; import org.springframework.core.convert.converter.converter; public class intconverter implements converter <String, Integer> {@Override public innig integer convert (String text) {if (text == null || ". } else {try {Integer value = integer.parseInt (text); Rückgabewert; } catch (Ausnahme e) {return 0; }}}} Paket com.my.controller.converter; import java.text.parseException; import Java.Text.SimpledateFormat; importieren java.util.date; DateFormat = new SimpledateFormat ("yyyy-mm-dd"); DateFormat.SetLenient (false); try {return dateFormat.Parse (Text); } catch (parseException e) {e.printstacktrace (); } return null; }}Diese beiden sind globale Typ -Standardkonverter.
8. Test JSP
<%@ page Language = "java" contentType = "text/html; charset = utf-8" pageCoding = "utf-8"%> <%@ taglib uri = "http://java.sun.com/jsp/jstl/core" prefix = "c"%@%@ taglib@ taglib@ taglib uri = "http://java.sun.com/jsp/jstl/fmt" prefix = "fmt"%> <%@ taglib uri = "http://java.sun.com/jsp/jstl/functions" prefix = "fn"%@ taglib Prefix = "ST" URI = "http://www.springframework.org/tags"%> <%@ taglib prefix = "sf" uri = "http://www.spingframework.org/Tags/form"%> <! docTtype html public "http://www.w3.org/tr/html4/loose.dtd"><html><Head><meta http-equiv =" content-type "content =" text/html; charset = utf-8 "> <titels> Index </title> </head> <bods> <bods> <body> <sf: action = "$ {pageContext.request.contextPath}/av/add" method = "post" modelAttribute = "user4"> Benutzername: <sf: input path = "name"/> <sf: fehlerpaths path = "E -Mail"/> <sf: fehlers path = "E -Mail"/> <br/> Alter: <sf: input path = "Alter"/> <sf: fehlerspath = "Alter"/> <br/> Geburtstag: <sf: input path = "Geburtstag"/> <sf: yr. Married: <sf:radiobutton path="married" label="Yes" value="true"/> <sf:errors path="married" /><br/> Likes: <sf:checkbox path="likes" label="Football" value="Football"/> <sf:checkbox path="likes" label="Badminton" value="Badminton"/> <sf:checkbox path="likes" label = "pingpong" value = "pingpong"/> <sf: fehler path = "likes"/> <br/> Tel.: <Sf: Eingabespath = "Tel"/> <sf: fehlerspath = "tel"/> <br/> <Eingabe type = "sub: add"/> <hr/> felors: <br/. Likes: <c: foreach items = "$ {user4.likes}" var = "item"> $ {item}, </c: foreach> </sf: Form> </body> </html>Beachten Sie, dass der ModelAttribute -Attributwert in Form des Nutzungsnamens der Benutzer4 -Klasse beginnt, beginnend mit Kleinbuchstaben, andernfalls tritt ein Fehler auf.
9. Seite UI -Ergebnisse:
Nach dem Klicken auf die Schaltfläche Hinzufügen:
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.