tutorial mvc mkyong form example docs spring-mvc bean-validation

spring mvc - mvc - Agregando un mensaje de error a Spring 3 DataBinder para campos de objetos personalizados



spring mvc maven tutorial (1)

Generalmente llamo result.rejectValue("property", "error.object"); para añadir errores a BindingResult . Si desea agregar un error de objeto global, puede usar result.reject("error.object"); .

Por lo tanto, en su código, en lugar de:

ObjectError error = new ObjectError("email","An account already exists for this email."); result.addError(error);

prueba con

result.rejectValue("email", "error.user", "An account already exists for this email.");

Compruebe la referencia here .

Espero que esto ayude.

Estoy intentando agregar manualmente un mensaje de error de correo electrónico individual a mi modelo pero no se muestra nada en la vista.
Creo que puede ser así como estoy creando o adjuntando el ObjectError a BindingResult.
Estoy agregando el error dentro de la captura.

Aquí está el contenido de result.errors cuando dejo el campo de correo electrónico vacío y las anotaciones JSR-303 se activan (se muestra un error a la vista):

[Field error in object ''user'' on field ''email'': rejected value []; codes [NotEmpty.user.email,NotEmpty.email,NotEmpty.java.lang.String,NotEmpty]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [user.email,email]; arguments []; default message [email]]; default message [may not be empty]]



Aquí está el contenido de result.errors después de agregar manualmente el ErrorObject (error de correo electrónico no se muestra en la vista):

[Error in object ''email'': codes []; arguments []; default message [An account already exists for this email.]]



Controlador:

@RequestMapping(value = "/registration", method = RequestMethod.POST) public ModelAndView post(@Valid User user, BindingResult result) { if (result.hasErrors()) { ModelAndView modelAndView = new ModelAndView( Consts.MODEL_RESISTER_PAGE); modelAndView.addObject("user", user); return modelAndView; } else { try { userService.addUser(user); ModelAndView modelAndView = new ModelAndView( Consts.MODEL_CARD_REPORTS_HOME_PAGE); modelAndView.addObject("userRegisteredSuccess", Boolean.TRUE); return modelAndView; } catch (DataIntegrityViolationException ex) { ObjectError error = new ObjectError("email","An account already exists for this email."); result.addError(error); ModelAndView modelAndView = new ModelAndView( Consts.MODEL_RESISTER_PAGE); modelAndView.addAllObjects(result.getModel()); modelAndView.addObject("user", user); return modelAndView; } } }

Mi modelo:

@Entity public class User implements Serializable { /** * */ private static final long serialVersionUID = -5232533507244034448L; @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; @NotEmpty @Size(min=2, max=15) private String firstname; @NotEmpty @Size(min=2, max=15) private String surname; @NotEmpty @Email private String email; @NotEmpty @Size(min=6, max=10) private String password; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getFirstname() { return firstname; } public void setFirstname(String firstname) { this.firstname = firstname; } public String getSurname() { return surname; } public void setSurname(String surname) { this.surname = surname; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }



add.html

<form id="registrationForm" action="#" th:action="@{/registration}" th:object="${user}" method="post" class="clearfix"> <legend>Registration</legend> <div class="control-group input" th:class="${#fields.hasErrors(''firstname'')}? ''control-group input error''"> <input type="text" th:field="*{firstname}" placeholder="Firstname" /> <span class="help-block" th:if="${#fields.hasErrors(''firstname'')}" th:errors="*{firstname}"></span> </div> <div class="control-group input" th:class="${#fields.hasErrors(''surname'')}? ''control-group input error''"> <input type="text" th:field="*{surname}" placeholder="Surname" /> <span class="help-block" th:if="${#fields.hasErrors(''surname'')}" th:errors="*{surname}"></span> </div> <div class="control-group input" th:class="${#fields.hasErrors(''email'')}? ''control-group input error''"> <input type="text" th:field="*{email}" placeholder="Email" /> <span class="help-block" th:if="${#fields.hasErrors(''email'')}" th:errors="*{email}"></span> </div> <div class="control-group input" th:class="${#fields.hasErrors(''password'')}? ''control-group input error''"> <input type="password" th:field="*{password}" placeholder="Password" /> <span class="help-block" th:if="${#fields.hasErrors(''password'')}" th:errors="*{password}"></span> </div> <div class="clearfix"> <input type="submit" class="btn btn-success btn-large" value="Register" /> </div> </form>