Подтвердить что ты не робот

Каково использование интерфейса BindingResult в spring MVC?

Может ли BindingResult связывать только исключения с представлением или что-то еще?

Каково точное использование BindingResult?

Или это полезно для привязки атрибута модели с представлением.

4b9b3361

Ответ 1

Конкретный пример: используйте объект BindingResult в качестве аргумента для метода проверки Validator внутри контроллера.

Затем вы можете проверить этот объект на предмет ошибок проверки:

validator.validate(modelObject, bindingResult);  
if (bindingResult.hasErrors()) {  
    // do something  
}

Ответ 2

По сути, BindingResult - это интерфейс, который определяет, как объект, в котором хранится результат проверки, должен сохранять и извлекать результат проверки (ошибки, попытки привязки к запрещенным полям и т.д.).

Из валидации формы Spring MVC с помощью аннотации:

[ BindingResult ] - это объект Springs, который содержит результат проверки и привязки и содержит ошибки, которые могли произойти. BindingResult должен прийти сразу после того, как проверен объект модели, иначе Spring не сможет проверить объект и выдать исключение.

Когда Spring видит @Valid, он пытается найти валидатор для проверяемого объекта. Spring автоматически выбирает аннотации проверки, если у вас включена функция "аннотации". Затем Spring вызывает валидатор и помещает любые ошибки в BindingResult и добавляет BindingResult в модель представления.

Ответ 3

Важно отметить, что порядок параметров действительно важен для spring. BindingResult должен появиться сразу после формы, которая проверяется. Аналогично, параметр [optional] Model должен появиться после BindingResult. Пример:

Действителен:

@RequestMapping(value = "/entry/updateQuantity", method = RequestMethod.POST)
public String updateEntryQuantity(@Valid final UpdateQuantityForm form,
                                  final BindingResult bindingResult,
                                  @RequestParam("pk") final long pk,
                                  final Model model) {
}

Недействительно:

RequestMapping(value = "/entry/updateQuantity", method = RequestMethod.POST)
public String updateEntryQuantity(@Valid final UpdateQuantityForm form,
                                  @RequestParam("pk") final long pk,
                                  final BindingResult bindingResult,
                                  final Model model) {
}

Ответ 4

От официальной Spring документации:

Общий интерфейс, который представляет результаты привязки. Расширяет интерфейс для возможностей регистрации ошибок, что позволяет Validator и добавляет анализ и модель привязки здание.

Работает как получатель результата для DataBinder, полученный через Метод DataBinder.getBindingResult(). Реализации BindingResult также может использоваться напрямую, например, для вызова на него валидатора (например, как часть unit test).

Ответ 5

Ну, это последовательный процесс. Запрос сначала обрабатывается FrontController, а затем перемещается к нашему собственному контроллеру настройки с аннотацией @Controller.

но наш метод контроллера - это привязка бина с использованием атрибута модели, и мы также выполняем несколько проверок значений бина.

поэтому вместо перемещения запроса в наш класс контроллера FrontController перемещает его к одному перехватчику, который создает временный объект нашего компонента и проверяет значения. если проверка прошла успешно, свяжите значения temp obj с нашим фактическим bean-компонентом, который хранится в @ModelAttribute, в противном случае, если проверка не удалась, она не привязывается и перемещает страницу соответственно к странице ошибки или куда угодно.

enter image description here

Ответ 6

BindingResult используется для проверки.

Пример:-

 public @ResponseBody String nutzer(@ModelAttribute(value="nutzer") Nutzer nutzer, BindingResult ergebnis){
        String ergebnisText;
        if(!ergebnis.hasErrors()){
            nutzerList.add(nutzer);
            ergebnisText = "Anzahl: " + nutzerList.size();
        }else{
            ergebnisText = "Error!!!!!!!!!!!";
        }
        return ergebnisText;
    }