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