Я новичок в 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";
}
}
Теперь, если я не укажу значение в поле имени пользователя, система не проверяет его и позволяет перейти к следующему виду.
Может кто-то, пожалуйста, помогите мне. Заранее спасибо,
Аннотации @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));
}
Понадобился время, чтобы понять это, я надеюсь, что это поможет кому-то.
У меня такая же проблема. Боб просто не получил подтверждения.
То, что я сделал, было создано в библиотеке через меню "buildpath" и добавлено hibernate-validator.jar в мою библиотеку. Я мог использовать аннотации спящего режима, и я не получал ошибок компиляции, но когда я его запускал, бобы никогда не проверялись.
Причина в том, что для приложения требуется hibernate-validator.jar в папке WEB-INF/lib, чтобы он мог использовать его для проверки.
hibernate-validation.jar
в свой проект (не толькоvalidation-api.jar
)?@Size
на@Length
(или@NotEmpty
/@NotBlan /
@NotBlank
?