مقدمة
يمكن للتحقق من التعليقات التوضيحية باستخدام Spring MVC التحقق مباشرة من البيانات البسيطة لنموذج العرض. لاحظ أن هذا بسيط. إذا كان التحقق من بيانات النموذج يتطلب بعض المنطق التجاري الأكثر تعقيدًا ، فمن الصعب استخدام التعليق التوضيحي للتحقق.
فيما يلي التحقق من التعليقات التوضيحية باستخدام Spring MVC ، بالإضافة إلى مثال التحقق من التعليقات التوضيحية الخاصة بـ @Tel ، والذي يحتوي على:
1. دعم متعدد اللغات (التدويل)
2. تحويل البيانات الافتراضية أولاً. على سبيل المثال ، إذا تم تمرير نوع int ونوع التاريخ في قيمة فارغة ، فسيتم طرح استثناء. سيتم إعطاء القيمة الافتراضية المعطاة.
دعونا نلقي نظرة على التكوين أولاً:
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_3_0.xsd" 1 </isplay-name> <context-param> <Param-name> contextConfigLocation </param-name> <Param-value> classpath: spring.xml </parm-value> </suctext-param> <Servlet> <sterlet-name> المرسل </servlet-name> <Srevlet-Class> org.springframework.web.servlet.dispatcherservlet </servlet-class> <Init-param> <Param-name> contextConfigLocation </param-name> <param-value> </parm-value> <Servlet-Name> Dispatcher </servlet-name> <url-pattern>/</url-pattern> </stervlet-mapping> <stanter> <stlecter-class> org.springframework.web.context.contextloaderlistener </stanterer-class> </leader> </swith-file-list> </web-app>
لا يوجد شيء يمكن قوله هنا ، فقط أضف تكوين spring.xml إلى contextConfigLocation
2. Spring.xml
<؟ xmlns: tx = "http://www.springframework.org/schema/tx" Xmlns: mvc = "http://www.springframework.org/schema/mvc" http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/mvc/Spring-Mvc-3 تعليقات توضيحية controller ملحوظة إلى Bean-> <السياق: مكون-المسح القاعدة = "com.my"/> <!-عرض فئة التفسير-> <bean> name = "viewClass" value = "org.springframework.web.servlet.view.jstlview"/> </bean> <!-ملف المورد: الرسائل. <property name = "ValidationMessagesource" ref = "messagesource"/> </bean> <!-محول نوع البيانات المخصص-> <bean id = "conversionservice"> <property name = "converters"> <list> <boan/> </list
أضف خدمة التحويل إلى <mvc: تعتمد على التعليقات التوضيحية/> ، ثم أضف المحول الافتراضي للنظام إلى خدمة التحويل. على سبيل المثال ، هناك intconverter و dateconverter أعلاه. بالطبع ، يمكن أيضًا تخصيصه وأنواع أخرى ، وهو أمر عالمي.
تتم إضافة خصائص متعددة اللغات إلى التحقق من التحقق. بالطبع ، تعتمد لغة Spring متعددة اللغات على لغة قبول رأس HTTP.
3. وحدة التحكم
package com.my.controller ؛ import java.util.list ؛ import javax.validation.valid ؛ import org.springframework.stereotepee.controller org.springframework.web.bind.annotation.modelattribute ؛ استيراد org.springframework.web.bind.annotation.requestmapping ؛ import org.springframework.web.bind.annotation.requestmethod ؛ import org.springframework.web.serving com.my.controller.bean.user4 ؛@controller@requestMapping (value = "av") الفئة العامة testAntAntationValidController {REquestMapping public ModelandView index () {modelandview view = new modelandview ("/testannotationvalid/index" ، "user4" ، new user4 () ؛ إرجاع عرض } @requestmapping (value = "/add" ، method = requestMethod.post) ModelandView Add (modelattributevalid user4 user ، bindingresult result) {modelandview view = new modelandview ("/testannotationvalid/index") ؛ view.addobject ("user4" ، user) ؛ if (result.haserrors ()) {list <Fielderror> errors = result.getFielderRors () ؛ لـ (fielderror err: errors) {system.out.println ("ObjectName:" + err.getObjectName () + "/tfieldName:" + err.getfield () + "/tfieldvalue:" + err.getRejectedValue () + "/tmessage: }} عرض الإرجاع ؛ }}هذه وحدة تحكم بسيطة ، في إضافة ، هناك تعليق توضيحي لـ @Valid ، وهو أمر مطلوب ، دون إضافة ذلك ، لا يعمل التحقق من التعليقات التوضيحية
4. user4.java طراز كيان فئة
package com.my.controller.bean ؛ استيراد java.util.date ؛ استيراد javax.validation.constraints.max ؛ استيراد javax.validation.constraints.min ؛ استيراد javax.validation.constraints.notnull ؛ javax.validation.constraints.past ؛ import javax.validation. javax.validation.constraints.size ؛ استيراد org.hibernate.validator.constraints.email ؛ استيراد org.hibernate.validator.constraints.length ؛ استيراد org.hibernate.validator.constraints.notblank ؛ public class {{private id ؛ notblank (message = "{valid.name}") اسم السلسلة الخاصة ؛ length (min = 4 ، max = 20 ، message = "{valid.password}") Private String Password ؛ notblank (message = "{valid.required}") @email (message = "{valid.email}") private string email ؛ notnull (message = "{valid.required}") private boolean متزوج ؛ min (value = 18 ، message = "{valid.agemin}") max (value = 100 ، message = "{valid.agemax}") private int age ؛ notnull (message = "{valid.required}") past (message = "{valid.birthday}") تاريخ عيد ميلاد الخاص ؛ pattern (regexp = "^[a-za-z] {2 ،} $" ، message = "{valid.address}") عنوان السلسلة الخاصة ؛ size (min = 1 ، message = "{valid.likesmin}") string private [] live ؛ @com.my.controller.validator.tel (message = "{valid.tel}" ، min = 3) private string tel ؛ Public Long getId () {return id ؛ } public void setId (id long) {this.id = id ؛ } السلسلة العامة getName () {return name ؛ } public void setName (اسم السلسلة) {this.name = name ؛ } السلسلة العامة getPassword () {return password ؛ } public void setPassword (سلسلة كلمة مرور) {this.password = password ؛ } السلسلة العامة getEmail () {return email ؛ } public void setemail (string email) {this.email = email ؛ } boolean public ismarried () {return arvel ؛ } public void setmarried (boolean arvel) {this.mribed = arber ؛ } public int getage () {return Age ؛ } public void setage (int age) {this.age = age ؛ } التاريخ العام getBirthday () {return Birthday ؛ } public void setbirthday (Date Birthday) {this.birthday = عيد ميلاد ؛ } السلسلة العامة getAddress () {return address ؛ } public void setAddress (عنوان السلسلة) {this.address = العنوان ؛ } السلسلة العامة [] getLikes () {return live ؛ } public void setlikes (string [] live) {this.likes = live ؛ } السلسلة العامة getTel () {return tel ؛ } public void settel (String tel) {this.tel = tel ؛ }}بصرف النظر عن tel ، فإن الآخرين كلها تعليقات توضيحية تأتي مع الربيع. بالطبع ، هناك آخرين. ابحث عن ذلك بنفسك.
5. message.properties
صالحة. لا يمكن أن يكون التفضيل أقل من 1 صالح.
قيمة الرسالة المقابلة لشرح نموذج user4. إذا كنت بحاجة إلى مجموعة متعددة اللغات دولية ، فأنت بحاجة فقط إلى إضافة ملف إضافي باسم Messages_en_us.properties.
6. tel
package com.my.controller.validator ؛ import java.lang.annotation.ElementType ؛ import java.lang.annotation javax.validation.payload ؛@target ({elementType.field ، elementType.method})@entry (attreentionpolicy.runtime) constraint (validationBy = telvalidator.class) public interface tel {int min () default 0 ؛ رسالة سلسلة () ؛ الفئة <؟> [] المجموعات () الافتراضي {} ؛ الفئة <؟ يمتد Payload> [] Payload () افتراضي {} ؛}إنشاء واجهة جديدة. لاحظ أن واجهة التعليقات التوضيحية مكتوبة مثل هذا: interface
Telvalidator:
package com.my.controller.validator ؛ import javax.annotation.resource ؛ import javax.validation.constraintvalidator ؛ import javax.validation.constraintvalidatorContex {Resource Private ResourceBundLemessagesource Messagesource ؛ Private Tel Tel ؛ Override public void تهيئة (tel tel) {this.tel = tel ؛ } Override public boolean isValid (قيمة السلسلة ، constraintValIdatorContext crosscontext) {boolean isValid ؛ if (value! = null && value.length ()> = tel.min ()) {isValid = true ؛ } آخر {isValid = false ؛ } if (! isValId) {constraintContext.disabledefaultConstraintViolation () ؛ constrentcontext.buildConstraintViolationWithTemplate (tel.message ()). addConstraintViolation () ؛ } إرجاع isValid ؛ }}هذه هي طريقة تنفيذ التحقق من Tel.
7. المحول
package com.my.controller.converter ؛ import org.springframework.core.convert.converter.converter ؛ public class intconverter تنفذ المحول <string ، integer> {override integer convert (text text) {if (text == null || ". } آخر {try {integer value = integer.parseint (text) ؛ قيمة الإرجاع } catch (استثناء e) {return 0 ؛ }}}} package com.my.controller.converter ؛ استيراد java.text.parseException ؛ استيراد java.text.simpleDateFormat DateFormat = جديد SimplEdateFormat ("Yyyy-MM-DD") ؛ DateFormat.setLenient (false) ؛ حاول {return dateformat.parse (text) ؛ } catch (parseException e) {E.PrintStackTrace () ؛ } إرجاع فارغ ؛ }}هذان هما المحولات الافتراضية من النوع العالمي.
8. اختبار JSP
<٪@ page language = "java" contentType = "text/html ؛ charset = utf-8" pageencoding = "utf-8" ٪> <٪@ taglib uri = "http://java.sun.com/jsp/jstl/core" precix = "c" ٪> <٪ taglib uri = "http://java.sun.com/jsp/jstl/fmt uri = "http://www.springframework.org/tags "http://www.w3. Action = "$ {pagecontext.request.contextpath}/av/add" method = "post" modelAttribute = "user4"> اسم المستخدم: <sf: path path = "name"/> <sf: errors path = "name"/> path = "email"/> <sf: errors path = "email"/> <br/> العمر: <sf: input path = "Age"/> <sf: errors path = "age"/> <br/> عيد ميلاد: <sf: path path = "errors"/> <sf: errors path = "birthday" متزوج: <sf: radiObutton path = "متزوج" label = "yes" value = "true"/> <sf: errors path = "arber"/> <br/> الإعجاب: <sf: checkbox path = "live" label = "football" value = "footbool"/> <sf: livebox path = "lible =" badminton " label = "pingpong" value = "pingpong"/> <sf: errors path = "live"/> <br/> tel: <sf: input path = "tel"/> <sf: errors path = "tel"/> <br/> <input type = "prisal" value = "add" الإعجابات: <c: foreach heads = "$ {user4.likes}" var = "item"> $ {item} ، </c: foreach> </sf: form> </body> </html>لاحظ أن قيمة سمة ModelAttribute في النموذج تتوافق مع اسم فئة user4 ، بدءًا من الأحرف الصغيرة ، وإلا فإن الخطأ سيحدث.
9. نتائج واجهة المستخدم الصفحة:
بعد النقر فوق زر إضافة:
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.