L'ajout de message d'erreur pour le Printemps 3 DataBinder pour objet personnalisé champs
Je suis en train d'ajouter manuellement une adresse électronique individuelle message d'erreur de mon modèle, mais rien n'est afficher dans la vue.
Je pense que c'est peut être la façon dont je suis la création ou de la joint le ObjectError à la BindingResult.
Je suis en ajoutant l'erreur à l'intérieur de l'attraper.
Voici le contenu de résultat.des erreurs quand je quitte le champ e-mail vide et de la JSR-303 annotations coup de pied dans (erreur s'affiche dans la vue):
[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]]
Voici le contenu de résultat.les erreurs après je ajouter manuellement les ErrorObject(e-mail d'erreur ne s'affichent pas dans la vue):
[Error in object 'email': codes []; arguments []; default message [An account already exists for this email.]]
Contrôleur:
@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;
}
}
}
Mon Modèle:
@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>
OriginalL'auteur Thomas Buckley | 2012-08-24
Vous devez vous connecter pour publier un commentaire.
J'ai l'habitude de l'appeler
result.rejectValue("property", "error.object");
pour ajouter des erreurs deBindingResult
. Si vous voulez ajouter un objet global d'erreur, vous pouvez utiliserresult.reject("error.object");
.Donc, dans votre code, au lieu de:
essayer avec:
Vérifier la référence ici.
Espère que cette aide.
Comme nous l'avons mis message localisé en
rejectValue
, peut-on mettre des message localisé c'est à dire "erreur.utilisateur" dansObjectError
? Je ne suis pas en mesure d'obtenir localisée message si j'utiliseObjectError
. Je suis localisée message à l'aide derejectValue
. Pouvez-vous s'il vous plaît aider??Pourquoi êtes-vous à l'aide de
ObjectError
? Vous devez utiliserrejectValue
méthode au lieu deObjectError
exemple pour ajouter des erreurs dans votre contrôleur. De cette façon, vous obtiendrez les messages localisés.Il fonctionne parfaitement.
résultat.rejectValue il fonctionne. Merci bro 🙂
OriginalL'auteur