عند استخدام initbinder للتحقق ، يجب أن تكون بعض البيانات المقدمة في وحدة التحكم هذه ذات طبيعة العمل ، أي أنه سيتم استخدامها فقط في حالات التحقق المعقدة نسبيًا. يمكن حل أكثر التحقق من النماذج البسيطة باستخدام التحقق من التعليقات التوضيحية.
لاستخدام التحقق من التعليقات التوضيحية ، يرجى الرجوع إلى: http://www.vevb.com/article/136448.htm
شيء واحد يجب ملاحظته هنا: لا يمكن أن يختار Interbinder والشرح سوى واحد من اثنين من التحديات. إذا تم استخدام initbinder ، فلا يمكن استخدام التحقق من التعليقات التوضيحية.
لن يتم تكرار التكوينات السابقة لـ Web.xml و Spring.xml ، يرجى الرجوع إلى التكوين في الرابط أعلاه. بالضبط نفس الشيء.
قم بتحميل الكود مباشرة:
1. فئة كيان نموذج user5
package com.my.controller.bean ؛ import java.util.date ؛ public class user5 {private long id ؛ اسم السلسلة الخاصة ؛ كلمة مرور السلسلة الخاصة ؛ تاريخ خاص CreateTime ؛ عصر INT الخاص ؛ 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 ؛ } التاريخ العام getCreateTime () {return createTime ؛ } public void setCreateTime (DateTeTime) {this.createTime = createTime ؛ } public int getage () {return Age ؛ } public void setage (int age) {this.age = age ؛ }}2. إضافة مدقق جديد:
package com.my.controller.validator ؛ استيراد org.springframework.stereotype.component ؛ استيراد org.springframework.validation.errors ؛ import org.springframework.validation.validationutils com.my.controller.bean.user5 ؛ componentpublic class testvalidator تنفذ Valitator {Override Public Boolean Supports (class <؟> paramclass) {return user5 } Override public void التحقق (Object OBJ ، أخطاء الأخطاء) {user5 user = (user5) obj ؛ التحقق من الصحة if (user.getage () <18) {errors.rejectValue ("Age" ، "Valid.Agemin" ، Object [] {"Age" ، 18} ، "لا يمكن أن يكون العمر أقل من {1} سنة") ؛ }}}يجب إضافة مكون component هنا ويتم حقن DI
3. وحدة التحكم
حزمة com.my.controller ؛ استيراد java.util.linkedhashmap ؛ استيراد java.util.list ؛ استيراد java.util.map ؛ javax.validation.valid ؛ استيراد org.springframework.beans.factory.annotation.autowired ؛ org.springframework.stereotype.controller ؛ استيراد org.springframework.validation.bindingResult ؛ استيراد org.springframework.validation.fielderror org.springframework.web.bind.annotation.initbinder ؛ استيراد org.springframework.web.bind.annotation.modelattribut org.springframework.web.servlet.modelandview ؛ استيراد com.my.controller.bean.user5 ؛ @controller @requestMapping (value = "binder") public class testinitBinderController {autowired Qalifier (value = "testvalidatorator") initBinder private void initbinder (WebDatabinder Binder) {binder.setValidator (Valitator) ؛ } @requestmapping (method = requestMethod.get) index public index () {return "/testInitBinder/index" ؛ } requestmapping (value = "add" ، method = requestMethod.post) ModelandView Add (modelattributevalid user5 user ، bindingResult result) {modelandview view = new modelandview ("testInitBinder/index") ؛ view.addobject ("المستخدم" ، المستخدم) ؛ if (result.haserrors ()) {list <Fielderror> errs = result.getFielderRors () ؛ خريطة <string ، string> maperRors = new LinkedHashMap <string ، string> () ؛ لـ (fielderror err: errs) {system.out.println ("ObjectName:" + err.getObjectName () + "/tfieldName:" + err.getfield () + "/tfieldValue:" + err.getRejectedValue () + " maperrors.put (err.getfield () ، err.getDefaultMessage ()) ؛ view.addobject ("الأخطاء" ، maperrors) ؛ } عرض الإرجاع ؛ } عرض الإرجاع ؛ }}حقن المدقق في وحدة التحكم.
في الواقع ، باستخدام initbinder ، لا يمكن أن تحصل طريقة err.getDefaultMessage () في وحدة التحكم إضافة الرسالة الصحيحة المقابلة. يمكنك رؤية نتيجة طباعة الإدخال النهائية.
4. عرض
<٪@ 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. method = "post" modelAttribute = "user5"> اسم المستخدم: <input type = "text" id = "name" name = "name" value = "$ {user.name}" /> <ber/> كلمة المرور: <input type = "text" id = "text" name = "password" value = "$ {user.password}" /> value = "$ {user.age}"/> <br/> <إدخال type = "إرسال" value = "add"/> <hr/> خطأ: <br/> <form: errors path = "*"> </errors> </form: form> </body> </html>لاحظ أنه يمكنك استخدام <النموذج فقط: الأخطاء/> للحصول على معلومات الخطأ ، وهذا <النموذج: الأخطاء/> يجب أن يكون في <النموذج: Form/>.
5. اختبار النتائج
انقر فوق زر إضافة:
اطبع:
يمكنك أن ترى أنه لا يمكن الحصول على المعلومات الصحيحة للخطأ هنا
في الواقع ، عندما يكون للبيانات المقدمة في صفحة النماذج المعقدة للغاية منطقًا تجاريًا معينًا ، لا ينبغي استخدام initbinder كثيرًا ، لأنه في كثير من الأحيان يمكننا استخدام خريطة لإدراج الأخطاء فيها وقراءتها على الصفحة. على سبيل المثال:
خريطة <سلسلة ، سلسلة> أخطاء ؛
errors.add ("الاسم" ، "لا يمكن أن يكون اسم المستخدم فارغًا!") ؛
:
:
تحتاج فقط إلى استخدام:
<span style = "color: red ؛"> $ {errors.name} <span>افعل ذلك.
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.