การแนะนำ
การตรวจสอบคำอธิบายประกอบโดยใช้สปริง MVC สามารถตรวจสอบข้อมูลง่าย ๆ ของโมเดลมุมมองโดยตรง โปรดทราบว่านี่เป็นเรื่องง่าย หากการตรวจสอบข้อมูลของโมเดลต้องการตรรกะทางธุรกิจที่ซับซ้อนมากขึ้นมันเป็นเรื่องยากที่จะใช้คำอธิบายประกอบสำหรับการตรวจสอบ
ต่อไปนี้คือการตรวจสอบคำอธิบายประกอบโดยใช้ Spring MVC รวมถึงตัวอย่างการตรวจสอบคำอธิบายประกอบของ Custom @Tel ซึ่งมี:
1. สนับสนุนหลายภาษา (นานาชาติ)
2. แปลงข้อมูลเริ่มต้นก่อน ตัวอย่างเช่นหากมีการผ่านประเภท INT และวันที่ในค่าที่ว่างเปล่าข้อยกเว้นจะถูกโยนลงไป ค่าเริ่มต้นที่กำหนดจะได้รับ
มาดูการกำหนดค่าก่อน:
1. web.xml
<? xml เวอร์ชัน = "1.0" การเข้ารหัส = "utf-8"?> <web-app version = "3.0" xmlns = "http://java.sun.com/xml/ns/javaee" xmlns: xsi = "http://ww.w3.org/200 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_3 1 </display-name> <context-param> <param-name> contextconfiglocation </param-name> <param-value> classpath: spring.xml </param- value> </dentrate-param> <servlet> <servlet-name> dispatcher <int-Param> <param-Name> contextConfigLocation </param-name> <param-value> </param-value> </init-param> <load-on-Startup> 1 </load-on-startup> </servlet> <servlet-mapping> <Sistener-Lass> org.springframework.web.context.contextloaderlistener </listener-class> </listener> <welcome-file-list> <welcome-file> index.jsp </welcome-file>
ไม่มีอะไรจะพูดที่นี่เพียงเพิ่มการกำหนดค่า spring.xml ใน contextconfiglocation
2. Spring.xml
<? xml version = "1.0" การเข้ารหัส = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://ww.w3.org/2001/xml xmlns: tx = "http://www.springframework.org/schema/tx" xmlns: บริบท = "http://www.springframework.org/schema/contex XSI: schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http:/www.springframework 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.springframework <!-คำอธิบายคำอธิบายประกอบ-> <บริบท: คำอธิบายประกอบ-config /> <!-การทำแผนที่คำอธิบายประกอบเริ่มต้นการสนับสนุน-> <MVC: การตรวจสอบความถูกต้องที่ขับเคลื่อนด้วยคำอธิบายประกอบ = "การตรวจสอบความถูกต้อง" การแปลง-บริการ = "ConversionService" /> <! คลาส-> <bean> <property name = "คำนำหน้า" value = "/web-inf/views/"/> <property name = "suffix" value = ". jsp"/> <!-สามารถว่างเปล่าสะดวกในการใช้ตรรกะของคลาสการตีความมุมมอง </epean> <!-ไฟล์ทรัพยากร: messages.properties-> <bean id = "MessagesOrce"> <property name = "basenames"> <list> <dalue> ข้อความ </value> </list> </property> Converter-> <bean id = "ConversionService"> <property name = "Converters"> <list> <bean/> <bean/> </list> </perty> </epean> </epeans>
เพิ่มบริการการแปลงเป็น <MVC: คำอธิบายประกอบที่ขับเคลื่อนด้วย/> จากนั้นเพิ่มตัวแปลงเริ่มต้นของระบบลงในบริการการแปลง ตัวอย่างเช่นมี intconverter และ dateconverter ด้านบน แน่นอนว่ามันสามารถปรับแต่งและประเภทอื่น ๆ ซึ่งเป็นระดับโลก
คุณสมบัติหลายภาษาจะถูกเพิ่มเข้าไปในตัวตรวจสอบความถูกต้องของตัวตรวจสอบ แน่นอนว่าภาษาที่พูดได้หลายภาษาของฤดูใบไม้ผลินั้นขึ้นอยู่กับภาษาการยอมรับของ HTTP ส่วนหัว
3. คอนโทรลเลอร์
แพ็คเกจ com.my.controller; นำเข้า java.util.list; นำเข้า Javax.validation.valid; นำเข้า org.springframework.stereotype.controller; นำเข้า org.springframework.validation.bindingresult; org.springframework.web.bind.annotation.modelattribute; นำเข้า org.springframework.web.bind.annotation.requestmapping; นำเข้า org.springframework.web.bind.annotation.requestmethod; com.my.controller.bean.user4;@controller@requestmapping (value = "av") คลาสสาธารณะ testannotationvalidcontroller {@requestmapping โมเดลสาธารณะและดัชนีวิวัฒนาการ () {modelandview view = new modelandView ("/testannotationvalid/index" มุมมองกลับ; } @RequestMapping (value = "/เพิ่ม", method = requestMethod.post) โมเดลสาธารณะและวิววิวเพิ่ม (@modelattribute @valid user4 ผู้ใช้, ผล bindingResult) {modelandview view = new ModelandView ("/testannotationValid/index"); view.adDobject ("user4", ผู้ใช้); if (result.haserrors ()) {list <fielderror> errors = result.getFielderRors (); สำหรับ (fielderror err: errors) {system.out.println ("objectName:" + err.getObjectName () + "/tfieldName:" + err.getField () + "/tfieldValue:" err.getRejectedValue () + "/tmessage:" }} return view; -นี่คือคอนโทรลเลอร์ที่เรียบง่ายในการเพิ่มมีคำอธิบายประกอบของ @valid ซึ่งจำเป็นโดยไม่ต้องเพิ่มสิ่งนี้การตรวจสอบคำอธิบายประกอบจะไม่ทำงาน
4. user4.java โมเดลเอนทิตีคลาส
แพ็คเกจ com.my.controller.bean; นำเข้า java.util.date; นำเข้า Javax.validation.constraints.max; นำเข้า Javax.validation.constraints.min; นำเข้า Javax.validation.contraints.notnull; javax.validation.constraints.size; นำเข้า org.hibernate.validator.constraints.email; นำเข้า org.hibernate.validator.constraints.length; นำเข้า org.hibernate.validator.constraints.notlank; @NotBlank (message = "{valid.name}") ชื่อสตริงส่วนตัว; @Length (min = 4, max = 20, message = "{valid.password}") รหัสผ่านส่วนตัว; @NotBlank (message = "{alid.Required}") @Email (message = "{valid.email}") อีเมลสตริงส่วนตัว; @NotNull (message = "{alid.Required}") บูลีนส่วนตัวแต่งงาน; @min (value = 18, message = "{valid.ageMin}") @max (value = 100, message = "{valid.ageMax}") อายุ int ส่วนตัว; @NotNull (message = "{alid.Required}") @past (message = "{quid.birthday}") วันเกิดส่วนตัว; @pattern (regexp = "^[a-za-z] {2,} $", message = "{quid.address}") ที่อยู่สตริงส่วนตัว; @Size (min = 1, message = "{valid.likesmin}") สตริงส่วนตัว [] ไลค์; @com.my.controller.validator.tel (message = "{valid.tel}", min = 3) สตริงส่วนตัวโทรศัพท์; Public Long getId () {return id; } โมฆะสาธารณะ setId (Long id) {this.id = id; } สตริงสาธารณะ getName () {ชื่อคืน; } โมฆะสาธารณะ setName (ชื่อสตริง) {this.name = name; } สตริงสาธารณะ getPassword () {ส่งคืนรหัสผ่าน; } โมฆะสาธารณะ setPassword (รหัสผ่านสตริง) {this.password = รหัสผ่าน; } สตริงสาธารณะ getEmail () {ส่งคืนอีเมล; } โมฆะสาธารณะ setEmail (อีเมลสตริง) {this.email = อีเมล; } บูลีนสาธารณะ ismarried () {กลับมาแต่งงาน; } โมฆะสาธารณะ setMarried (บูลีนแต่งงาน) {this.married = แต่งงาน; } public int getage () {return Age; } การตั้งค่าโมฆะสาธารณะ (อายุ int) {this.age = อายุ; } วันที่สาธารณะ getBirthday () {ส่งคืนวันเกิด; } โมฆะสาธารณะ setBirthday (วันเกิดวันที่) {this.birthday = วันเกิด; } สตริงสาธารณะ getAddress () {return address; } โมฆะสาธารณะ setAddress (ที่อยู่สตริง) {this.address = ที่อยู่; } สตริงสาธารณะ [] getLikes () {return likes; } โมฆะสาธารณะ setlikes (string [] likes) {this.likes = likes; } สตริงสาธารณะ getTel () {return tel; } โมฆะสาธารณะ Settel (String tel) {this.tel = tel; -นอกเหนือจาก @tel แล้วคนอื่น ๆ ยังเป็นคำอธิบายประกอบที่มาพร้อมกับฤดูใบไม้ผลิ แน่นอนมีคนอื่น ค้นหาด้วยตัวคุณเอง
5. ข้อความ properties
ถูกต้อง. required = ค่าฟิลด์ไม่สามารถว่างเปล่าถูกต้อง name = ชื่อผู้ใช้ไม่สามารถว่างเปล่าได้ password = รหัสผ่านขั้นต่ำนั้นถูกต้อง agemin = อายุไม่น้อยกว่า {1} ปีที่ถูกต้อง age.ageMax = อายุไม่เกิน {1} ปีที่ถูกต้อง ถูกต้อง likesmin = ค่าการตั้งค่าขั้นต่ำไม่น้อยกว่า 1 ถูกต้อง tel = หมายเลขโทรศัพท์มือถือไม่น้อยกว่า {min}ค่าข้อความที่สอดคล้องกันของคำอธิบายประกอบของรุ่น USER4 หากคุณต้องการหลายภาษาระหว่างประเทศคุณจะต้องเพิ่มไฟล์เพิ่มเติมด้วยชื่อ Message_en_us.properties
6. @tel
แพ็คเกจ com.my.controller.validator; นำเข้า java.lang.annotation.elementtype; นำเข้า java.lang.annotation.retention; นำเข้า java.lang.annotation.retentionpolicy; นำเข้า java.lang.lang.lang.lang.lang.lang.lang.lang.lang.lang.lang.lang.lang.lang.lang.lang.lang.lang.lang.lang.lang.lang.lang.lang.lang.lang.lang.lang.lang.lang.lang.lang javax.validation.payload; @Target ({ElementType.field, ElementType.method})@retention (RetentionPolicy.runtime) @constraint (ตรวจสอบได้ดี = telvalidator.class) สาธารณะ @interface ข้อความสตริง (); คลาส <?> [] กลุ่ม () ค่าเริ่มต้น {}; ชั้นเรียน <? ขยาย payload> [] payload () ค่าเริ่มต้น {};}สร้างอินเทอร์เฟซใหม่ โปรดทราบว่าอินเทอร์เฟซคำอธิบายประกอบ Java ถูกเขียนขึ้นเช่นนี้: @Interface
telvalidator:
แพ็คเกจ com.my.controller.validator; นำเข้า Javax.annotation.resource; นำเข้า Javax.validation.constraintvalidator; นำเข้า Javax.validation.constraintvalidatorcontext String> {@Resource Private ResourceBundleMessageOrce MessagesOrce; โทรศัพท์ส่วนตัวโทร; @Override โมฆะสาธารณะเริ่มต้น (โทรโทรศัพท์) {this.tel = tel; } @Override บูลีนสาธารณะ isValid (ค่าสตริง, constraintValidatorContext constrantContext) {บูลีน isvalid; if (value! = null && value.length ()> = tel.min ()) {isvalid = true; } else {isValid = false; } if (! isvalid) {constraintContext.disabledefaultConstraintViolation (); ConstraintContext.buildConstraintViolationWithTemplate (tel.Message ()). addConstraNtViolation (); } return isvalid; -นี่คือวิธีการใช้งานการตรวจสอบของ @Tel
7. ตัวแปลง
แพ็คเกจ com.my.controller.converter; นำเข้า org.springframework.core.convert.converter.converter; คลาสสาธารณะ intconverter ใช้ตัวแปลง <สตริง, จำนวนเต็ม> {@Override Public Integer Convert (ข้อความสตริง) {ถ้า (ข้อความ == NUL } else {ลอง {ค่าจำนวนเต็ม = integer.parseint (ข้อความ); ค่าส่งคืน; } catch (Exception e) {return 0; - แพ็คเกจ com.my.controller.converter; นำเข้า java.text.parseException; นำเข้า java.text.simpledateFormat; นำเข้า java.util.date; นำเข้า org.springframework.core.convert.converter.converter; dateFormat = ใหม่ simpledateFormat ("yyyy-mm-dd"); DateFormat.setLenient (เท็จ); ลอง {return dateFormat.parse (ข้อความ); } catch (parseexception e) {e.printstacktrace (); } return null; -ทั้งสองนี้เป็นตัวแปลงเริ่มต้นประเภททั่วโลก
8. ทดสอบ JSP
<%@ page language = "java" contentType = "ข้อความ/html; charset = utf-8" pageencoding = "utf-8"%> <%@ taglib uri = "http://java.sun.com/jsp/jstl/core uri = "http://java.sun.com/jsp/jstl/fmt" คำนำหน้า = "fmt"%> <%@ taglib uri = "http://java.sun.com/jsp/jstl/functions" prefix = "fn" uri = "http://www.springframework.org/tags"%> <%@ taglib คำนำหน้า = "sf" uri = "http://www.springframework.org/tags/form"%> "http://www.w3.org/tr/html4/loose.dtd"><html> <head> <meta http-equiv =" content-ype "content =" text/html; charset = utf-8 " action = "$ {pageContext.Request.ContextPath}/av/Add" method = "post" modelattribute = "user4"> ชื่อผู้ใช้: <sf: input path = "name"/> <sf: path errors = "name"/> <br/> รหัสผ่าน: /> <sf: path errors = "อีเมล"/> <br/> อายุ: <sf: input path = "age"/> <sf: path isrors = "age"/> <br/> วันเกิด: <sf: input path = "วันเกิด"/> <sf: path errors = "วันเกิด"/> <br/> <SF: radiobutton path = "แต่งงาน" label = "ใช่" value = "true"/> <sf: path iscrors = "แต่งงาน"/> <br/> ชอบ: <sf: pathbox path = "likes" label = "football" value = "Football"/> label = "pingpong" value = "pingpong"/> <sf: path iscrors = "likes"/> <br/> โทรศัพท์: <sf: path = "tel"/> <sf: path isrors = "tel"/> <br/> ชอบ: <c: foreach items = "$ {user4.likes}" var = "item"> $ {item}, </c: foreach> </sf: form> </body> </html>โปรดทราบว่าค่าแอตทริบิวต์ modelattribute ในรูปแบบสอดคล้องกับชื่อคลาส User4 เริ่มต้นด้วยตัวพิมพ์เล็กมิฉะนั้นจะเกิดข้อผิดพลาด
9. หน้า UI ผลลัพธ์:
หลังจากคลิกที่ปุ่มเพิ่ม:
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น