BindingResult не обнаруживает ошибки JSR: 303 на основе аннотаций

1

Я новичок в Spring MVC. Я пытаюсь использовать простое приложение для проверки значений формы. Я использую Spring BindingResult и JSR303 для проверки поля. Но по некоторым причинам ошибки проверки не отображаются в теге ошибки. Фактически, результат привязки не возвращает никаких ошибок.

Мой фасоль выглядит следующим образом:

package com.app.ebl.bean.login;

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;


public class LoginBean {

  @NotNull(message = "User Name field can not be blank")
  @Size(max = 10, message = "User Name should not be more than 10 characters")
  private String userName;

  private String password;

  public String getUserName() {
    return userName;
  }

  public void setUserName(String userName) {
    this.userName = userName;
  }

  public String getPassword() {
    return password;
  }

  public void setPassword(String password) {
    this.password = password;
  }



}

Мой класс контроллера Посмотрите ниже,

package com.app.ebl.controller.login;

import javax.validation.Valid;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.app.ebl.bean.login.LoginBean;


@Controller
public class LoginController {
  private static final Log log = LogFactory.getLog(LoginController.class);

  @RequestMapping(value="/login", method=RequestMethod.GET)
  public String toLogin(Model model)
  {
    model.addAttribute("login",new LoginBean());
    return "login";
  }

  @RequestMapping(value="/authenticate", method=RequestMethod.POST)
  public String authenticate(@ModelAttribute(value = "login") @Valid LoginBean login,
      BindingResult bindingResult, Model model)
  {

    if(bindingResult.hasErrors()) {
      return "login";
    }

    model.addAttribute("userName",login.getUserName());
    return "home";
  }

}

Теперь, если я не укажу значение в поле имени пользователя, система не проверяет его и позволяет перейти к следующему виду.

Может кто-то, пожалуйста, помогите мне. Заранее спасибо,

  • 0
    Ваш код выглядит хорошо. Вы добавили hibernate-validation.jar в свой проект (не только validation-api.jar )?
  • 0
    Будет ли это работать, если вы замените @Size на @Length (или @NotEmpty/@NotBlan / @NotBlank ?
Показать ещё 1 комментарий
Теги:
spring
spring-mvc
validation

2 ответа

1
Лучший ответ

Аннотации @Size принимают оба параметра min и max. Когда min не предоставляется, он использует значение по умолчанию:

/**
 * @return size the element must be higher or equal to
 */
int min() default 0;

Вы не предоставили никаких данных, и я предполагаю, что ваш контроллер не преобразует пустые строки в нуль. Во - первых, я бы перейти на @NotBlank аннотацию из org.hibernate.validator. В дополнение к @NotNull он удаляет конечные пробелы:

public class LoginBean {

  @NotBlank(message = "User Name field can not be blank")
  @Size(max = 10, message = "User Name should not be more than 10 characters")
  private String userName;
....

Кроме того, определите связывание init в вашем контроллере, которое изменит пустые строки на null с помощью StringTrimmerEditor из org.springframework.beans.propertyeditors.StringTrimmerEditor

@InitBinder
public void initBinder(WebDataBinder binder) {
    binder.registerCustomEditor(String.class, new StringTrimmerEditor(true));
}
  • 1
    Большое спасибо. Вопрос решен сейчас. На самом деле я получаю пустым вместо нуля. Также требовался jibernate-validator jar. Спасибо за фрагмент кода, который теперь также обрезает пробелы.
0

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

У меня такая же проблема. Боб просто не получил подтверждения.

То, что я сделал, было создано в библиотеке через меню "buildpath" и добавлено hibernate-validator.jar в мою библиотеку. Я мог использовать аннотации спящего режима, и я не получал ошибок компиляции, но когда я его запускал, бобы никогда не проверялись.

Причина в том, что для приложения требуется hibernate-validator.jar в папке WEB-INF/lib, чтобы он мог использовать его для проверки.

  • 0
    Я имею в виду, 5 лет после этого мне очень помогает :) :) :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню