Perkenalan
Verifikasi Anotasi Menggunakan Spring MVC dapat secara langsung memverifikasi data sederhana dari model tampilan. Perhatikan bahwa ini sederhana. Jika verifikasi data model memerlukan beberapa logika bisnis yang lebih kompleks, sulit untuk menggunakan anotasi untuk verifikasi.
Berikut ini adalah verifikasi anotasi menggunakan Spring MVC, ditambah contoh verifikasi anotasi @tel, yang memiliki:
1. Dukung multibahasa (internasionalisasi)
2. Konversi data default terlebih dahulu. Misalnya, jika jenis int dan tanggal dilewatkan dalam nilai kosong, pengecualian akan dilemparkan. Nilai default yang diberikan akan diberikan.
Mari kita lihat konfigurasi terlebih dahulu:
1. Web.xml
<? Xml Version = "1.0" encoding = "UTF-8"?> <Web-app Versi = "3.0" xmlns = "http://java.sun.com/xml/ns/javaee" xmlns: xsi = "http:/www.w3.org/org/2001 =" http:/www.w3.org/org/p21 xsi: schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/we-pappe-app_3.sun.com/xml/ns/nsy 1 </display-name> <Context-param> <param-name> ContextConfigLocation </param-name> <param-value> classpath: spring.xml </param-value> </context-param> <servlet> <servlet-classer> dispatcher </servlet-name> <servlet-class-classis.spatcher. <init-param> <param-name>contextConfigLocation</param-name> <param-value></param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <listener> <listener-class> org.springframework.web.context.contextLoaderListener </engeaner-class> </engeaner> <creendak-file-file> <creendak-filse> index.jsp </celcome-file> </welcome-file-file> </web-app>
Tidak ada yang bisa dikatakan di sini, cukup tambahkan konfigurasi spring.xml ke ContextConfiglocation
2. Spring.xml
<? XML Versi = "1.0" encoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmls xmlns: tx = "http://www.springframework.org/schema/tx" xmlns: context = "http://www.springframework.org/schema/context" xmlns: mvc = "http:/schema/context" xmlns: mvc = "http:/schema.cfring XSI: schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http:/wwww.springfram.orgework.org 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.springframewework.org/schema/schema/schema/schema/schema/schema/schema/schema/schema/schema <!-Deskripsi Anotasi-> <konteks: anotasi-konfigurasi /> <!-Dukungan pemetaan anotasi default-> <mvc: validator yang digerakkan oleh anotasi = "validator" layanan konversi = "conversionservice" /> <!-convert class @controller annotation ke bean-> <Context: componic-scan-scan. <Bean> <Properti Nama = "Prefix" Value = "/Web-Inf/Views/"/> <Properti Nama = "Suffix" Value = ". JSP"/> <!-dapat kosong, nyaman untuk mengimplementasikan logika kelas interpretasi tampilan berdasarkan <wiews> <wiews "valuewe" valuewe = "org.springfring.wer.weB.weB.weB.weB.weB.weB.weB.weB.weB. File Sumber Daya: Message.Properties-> <bean id = "MessageSource"> <name properti = "Basenames"> <cist> <value> Pesan </ value> </list> </propert> </ bean> <!-verifier-> <bean id = "validator"> <Property name = "validationMessageSageSource" Ref Refor = "walker"> </validasi </validasi </validationMessageSageSource "Ref Refor =" walker "> </validor </validorseMessageSage" ref refsource " ID = "ConversionService"> <name properti = "Converters"> <cist> <bean/> <bean/> </list> </propert> </bean> </bean>
Tambahkan layanan konversi ke <mvc: anotasi-digerakkan/>, dan kemudian tambahkan konverter default sistem ke layanan konversi. Misalnya, ada Intconverter dan Dateconverter di atas. Tentu saja, itu juga dapat disesuaikan dan jenis lainnya, yang merupakan global.
Properti multibahasa ditambahkan ke validator validator. Tentu saja, bahasa multibahasa Spring didasarkan pada bahasa penerimaan header HTTP.
3. Pengontrol
Paket com.my.controller; impor java.util.list; impor javax.validation.valid; impor org.springframework.stereotype.controller; impor org.springframework.validation.bindingResult; impor org.springframework.validation org.springframework.web.bind.annotation.modelattribute; impor org.springframework.web.bind.annotation.requestmapping; impor org.springframework.web.bind.annotation.requestmethod; impor org.spramework.wind.annotation.requestmethod; impor org.spramework.winb.boderdeland. com. tampilan kembali; } @RequestMapping (value = "/add", Method = requestMethod.post) Public ModelAndView Add (@ModelAttribute @Valid user4 pengguna, hasil BINDINGRESULT) {ModelAndView View = new ModelAndView ("/testannotationValid/index"); view.addObject ("user4", user); if (result.haserrors ()) {list <fielderror> errors = result.getFielderRors (); untuk (fielderror err: errors) {System.out.println ("ObjectName:" + err.getObjectName () + "/tfieldName:" + err.getField () + "/tFieldValue:" + err.getRECTEDValue () + "/tmessage:" + err.getDefaultMs () + "/tmessage:" + err.getDefauldms }} return view; }}Ini adalah pengontrol sederhana, di ADD, ada anotasi @valid, yang diperlukan, tanpa menambahkan ini, verifikasi anotasi tidak akan berhasil
4. Kelas Entitas Model Pengguna4.Java
Paket com.my.controller.bean; impor java.util.date; impor javax.validation.constraints.max; impor javax.validation.constraints.min; impor javax.validation.constraints.notnull; impor javax.validation.constraints.pastraBs. javax.validation.constraints.size; impor org.hibernate.validator.constraints.email; impor org.hibernate.validator.constraints.length; impor org.hibernate.validator.constraints.notblank; pengguna kelas publik4 {id pribadi yang panjang; @Notblank (message = "{valid.name}") nama string pribadi; @Length (min = 4, max = 20, message = "{valid.password}") kata sandi string pribadi; @Notblank (message = "{valid.Required}") @email (message = "{valid.email}") email string pribadi; @Notnull (message = "{valid.Required}") Private Boolean menikah; @Min (value = 18, message = "{valid.agemin}") @max (value = 100, message = "{valid.AgeMax}") private int usia; @Notnull (message = "{valid.Required}") @past (message = "{valid.birthday}") ulang tahun tanggal pribadi; @Pattern (regexp = "^[a-za-z] {2,} $", message = "{valid.address}") alamat string pribadi; @Size (min = 1, message = "{valid.LikeSmin}") Private String [] suka; @com.my.controller.validator.tel (message = "{valid.tel}", min = 3) Private String Tel; publik long getId () {return id; } public void setId (Long ID) {this.id = id; } public string getName () {return name; } public void setName (name string) {this.name = name; } public string getPassword () {return kata sandi; } public void setPassword (kata sandi string) {this.password = kata sandi; } public String geteMail () {return email; } public void seteMail (string email) {this.email = email; } public boolean isMarried () {return menikah; } public void setMarried (Boolean menikah) {this.married = menikah; } public int getage () {usia kembali; } public void setage (int usia) {this.age = usia; } tanggal publik getBirthday () {kembali ulang tahun; } public void setBirthday (tanggal ulang tahun) {this.birthday = ulang tahun; } public String getAddress () {alamat kembali; } public void setAddress (Alamat String) {this.address = alamat; } public string [] getLikes () {return likes; } public void setLikes (string [] suka) {this.likes = suka; } public string getTel () {return tel; } public void settel (string tel) {this.tel = tel; }}Selain @tel, yang lain semua anotasi yang datang dengan musim semi. Tentu saja, ada yang lain. Cari sendiri.
5. Pesan. Properti
valid.Required = Nilai bidang tidak dapat kosong valid.name = Nama pengguna tidak dapat kosong valid.password = Kata sandi minimum valid.Agemin = Usia tidak dapat kurang dari {1} tahun valid.AGEMAX = Usia tidak dapat lebih besar dari {1} tahun valid. Preferensi minimum tidak boleh kurang dari 1 valid.tel = nomor ponsel tidak boleh kurang dari {min}Nilai pesan yang sesuai dari anotasi model User4. Jika Anda membutuhkan multibahasa internasional, Anda hanya perlu menambahkan file tambahan dengan nama pesan_en_us.properties.
6. @tel
Paket com.my.controller.validator; impor java.lang.annotation.elementType; impor java.lang.annotation.Retention; impor java.lang.annotation.RetentionPolicy; impor java.lang.annotation.target; impor impor javax.validation.constrain; javax.validation.payload; @Target ({elementType.field, elementType.method})@retensi (retentionpolicy.runtime) @constraint (divalidasibyby = telvalidator.class) public @interface tel {int min () default 0; String message (); Kelas <?> [] Grup () default {}; Kelas <? Extends payload> [] payload () default {};}Buat antarmuka baru. Perhatikan bahwa antarmuka anotasi java ditulis seperti ini: @interface
Telvalidator:
Paket com.my.controller.validator; import javax.annotation.resource; impor javax.validation.constraintvalidator; impor javax.validation.constraintvalidatorContext; impor org.springframework.context.support.ResourceBundor ConseptValidator <Tel, String> {@Resource Private ResourceBundLeMessageSource Resquource; Tel telev pribadi; @Override public void initialize (Tel tel) {this.tel = tel; } @Override public boolean isValid (nilai string, conceptValidatorContext ConcervaintContext) {boolean isValid; if (value! = null && value.length ()> = tel.min ()) {isValid = true; } else {isValid = false; } if (! isValid) {ConstraintContext.DisableDefaultConstraintViolation (); ConstiintContext.BuildConstraintviolationWithTemplate (tel.message ()). AddConstraintviolation (); } return isValid; }}Ini adalah metode implementasi verifikasi @tel.
7. Converter
Paket com.my.controller.converter; impor org.springframework.core.convert.converter.converter; kelas publik Intconverter mengimplementasikan Converter <String, Integer> {@Override Public Integer Convert (string Text) {if (text == null || "" .Equals (TEKS) (TEXT) {if (text == null || "" .Equals (TEKS) (TEXT) {if == null || "" .Equals (TEKS) (TEXT) {if == NULL || " } else {try {integer value = integer.parseint (teks); nilai pengembalian; } catch (Exception e) {return 0; }}}} Paket com.my.controller.converter; import java.text.parseexception; import java.text.simpledateFormat; impor java.util.date; impor org.springframework.core.convert, date @converter; converRer; con -date @converry {converrer {converry; con -date {converrer.converter; con -date {converry; converrer {converRer; converrer; con -{converrer @converer; con -{converRer; converRer; converrer {ConVerREDRED; SimpleDateFormat DateFormat = new SimpleDateFormat ("yyyy-mm-dd"); dateFormat.setLenient (false); coba {return dateFormat.parse (teks); } catch (parseException e) {e.printstacktrace (); } return null; }}Keduanya adalah konverter default tipe global.
8. Tes JSP
<%@ page language = "java" contentType = "text/html; charset = utf-8" pageEncoding = "utf-8"%> <%@ taglib uri = "http://java.sun.com/jsp/jstl/core" prefix = "c"%> <%@ 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 awalan = "sf" uri = "http://www.springframework.org/tags/form"%html public//w3c/w3c/w3c/public/w3c/w3c/w3c/w3c/w3c/w3c/w3c/w3c/w3c/w3c/w3c/w3c/w3c. "http://www.w3.org/tr/html4/loose.dtd"><html><head><meta http-equiv =" content-type "content =" text/html; charset = utf-8 "> <title> indeks </title> </head> <body> form: sm: action = "$ {pagecontext.Request.contextPath}/av/add" Method = "POST" ModelAttribute = "User4"> Nama Pengguna: <sf: input path = "name"/> <sf: errors path = "name"/> <br/> kata sandi: <sf: input path = "kata sandi"/<sf: sf: sf: sf: sf: sf: sf: sf: sf: "sf:" sf: "sf:" Sf: "Sf:" Sf: "SF:" SF: "SF:" SF: "SF:" SF: " path="email" /><sf:errors path="email" /><br/> Age:<sf:input path="age"/><sf:errors path="age" /><br/> Birthday:<sf:input path="birthday"/><sf:errors path="birthday" /><br/> Address:<sf:input path="address"/><sf:errors path="address" /> <br/> Menikah: <sf: RadioButton Path = "menikah" label = "yes" value = "true"/> <sf: kesalahan path = "menikah"/> <br/> suka: <sf: pathbox path = "likes" label = "sepak bola" value = "sepak bola"/> <sf: kotak centang = "label" label "nilai" nilai "/> <sf: centang badm =" label "label" nilai "nilai"/> <sf: centang "label" label "nilai" label "nilai" label "nilai" label "label" nilai "label" nilai "label" nilai "label" nilai "label" nilai "label" nilai "badm:" sm. " path="likes" label="Pingpong" value="Pingpong"/> <sf:errors path="likes" /><br/> Tel:<sf:input path="tel"/><sf:errors path="tel" /><br/> <input type="submit" value="Add" /> <hr/> Errors:<br/><sf:errors path = "*"> </sf: errors> <hr/> suka: <c: foreach item = "$ {user4.likes}" var = "item"> $ {item}, </c: foreach> </sf: form> </body> </html>Perhatikan bahwa nilai atribut ModelAttribute dalam bentuk sesuai dengan nama kelas User4, dimulai dengan huruf kecil, jika tidak kesalahan akan terjadi.
9. Hasil UI Halaman:
Setelah mengklik tombol Tambah:
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.