При использовании initbinder для проверки некоторые данные, представленные в этом контроллере, должны иметь деловую природу, то есть они будут использоваться только в относительно сложных ситуациях проверки. Наиболее простая проверка формы может быть решена с помощью проверки аннотаций.
Для использования проверки аннотаций, пожалуйста, см.
Одна вещь, которую следует отметить: initbinder и аннотация могут выбрать только одну из двух проверок. Если используется initbinder, проверка аннотации не может быть использована.
Предыдущие конфигурации Web.xml и Spring.xml не будут повторяться, обратитесь к конфигурации в вышеуказанной ссылке. Точно так же.
Прямая загрузка кода:
1. Класс объектов модели пользователя5
пакет com.my.controller.bean; import java.util.date; открытый класс user5 {private Long Id; Приватное название строки; Private String Password; частная дата создания времени; частный int возраст; 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 () {return пароль; } public void setPassword (String password) {this.password = password; } public date getCreatetime () {return createTime; } public void setCreatetime (дата CreateTime) {this.createTime = createTime; } public int getage () {return Age; } public void setage (int age) {this.age = age; }}2. Добавьте новый валидатор:
пакет com.my.controller.validator; import org.springframework.stereotyle.component; импорт org.springframework.validation.errors; импорт org.springframework.validation.validationutils; импорт org.spramework.validation.validator; com.my.controller.bean.user5; @componentpublic class testvalidator реализует Validator {@override public boolean -поддержку (class <?> paramclass) {return user5.class.equals (paramclass); } @Override public void validate (Object obj, ошибки ошибок) {user5 user = (user5) obj; Validationutils.rejectifemptyorwhitespace (ошибки, "name", "value.name", null, "); if (user.getage () <18) {errors.rejectValue ("age", "valive.agemin", новый объект [] {"age", 18}, "Возраст не может быть меньше {1} лет"); }}}@Component необходимо добавить здесь и вводится DI
3. Контроллер
пакет com.my.controller; import java.util.linkedhashmap; import java.util.list; импорт java.util.map; import javax.validation.valid; импорт org.springframework.beans.factory.annotation.autowired; org.springframework.stereotype.controller; import org.springframework.validation.BindingResult; импорт org.springframework.validation.fielderror; импорт org.springframework.validation.validator; import org.spramework.web.WindAbirdation.Walidator; Import.Spramework.web.Winderation. org.springframework.web.bind.annotation.initbinder; import org.springframework.web.bind.annotation.modelattribute; импорт org.springframework.web.bind.annotation.requestmapping; импорт org.spramework.web.bindatation.Requestmation; org.springframework.web.servlet.modelandView; import com.my.controller.bean.user5; @controller @requestmapping (value = "binder") public class testinitbindercontroller {@autowired @qualifier (value = "testvalidator") private Validator Validator; @Initbinder private void initbinder (webdatabinder binder) {binder.setvalidator (validator); } @RequestMapping (method = requestMethod.get) public String Index () {return "/testinitBinder/index"; } @RequestMapping (value = "add", method = requestMethod.post) public modelandView add (@modelattribute @valid user5 user, bindingresult result) {modelandview = new ModelAndView ("testinitBinder/index"); view.addobject («Пользователь», пользователь); if (result.haserrors ()) {list <fielderror> errs = result.getFielderrors (); Map <string, string> maperrors = new LinkedHashmap <string, string> (); for (fielderror err: errs) {System.out.println ("ObjectName:" + err.getObjectName () + "/tfieldName:" + err.getfield () + "/tfieldValue:" + err.getRecteDValue () + "/tmessage:" + err.getDefaultmessage ()); maperrors.put (err.getfield (), err.getDefaultmessage ()); view.addobject («ошибки», Maperrors); } return View; } return View; }}Введите валидатор в контроллер.
Фактически, использование инициализации, метод err.getDefaultmessage () в контроллере Add, не может получить соответствующее правильное сообщение. Вы можете увидеть окончательный результат печати ввода.
4. Посмотреть
<%@ 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 prefix = "form" uri = "http://www.springframework.org/tags/form"%> <! Doctpe html public "//w3c // dtd html en ". "http://www.w3.org/tr/html4/loose.dtd"><html><head><meta http-equiv =" content-type "content =" text/html; charset = utf-8 "> <title> init bind action = "/testspringmvc1/binder/add" method = "post" modelattribute = "user5"> Имя пользователя: <input type = "text" id = "name" name = "name" value = "$ {user.name}"/> <br/> пароль: <input type = "text" id = "password" = "value =" $ type = "text" id = "age" name = "age" value = "$ {user.age}"/> <br/> <input type = "opper" value = "add"/> <hr/> error: <br/> <form: errors path = "*"> </form: ошибки> </form: form> </body> </html>Обратите внимание, что вы можете использовать только <form: errors/> для получения информации об ошибках, и эта форма: ошибки/> должна быть в <form: form/>.
5. Тест результатов
Нажмите кнопку «Добавить»:
Распечатать:
Вы можете видеть, что правильная информация об ошибке не может быть получена здесь
Фактически, когда данные, представленные на странице очень сложной формы, имеют определенную бизнес -логику, инициатор не должен использоваться много, потому что много раз мы можем использовать карту для вставки в нее ошибок и прочитать ее на странице. например:
Карта <строка, строка> ошибки;
errors.add («Имя», «Имя пользователя не может быть пустым!»);
:
:
Вам нужно только использовать:
<span style = "color: red;"> $ {errors.name} <pan>Просто сделай это.
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.