4 votes

Validation du formulaire Thymeleaf pour une valeur unique, comment passer l'erreur à la vue

Je suis en train de créer un formulaire de registre pour mon application. Je veux vérifier si le nom d'utilisateur est unique. Je le fais par

@Transactional
@RequestMapping(value = "/users/", method = RequestMethod.POST)
public String createUser(@ModelAttribute("user") @Valid User user, BindingResult bindingResult){

    if (bindingResult.hasErrors() || !userService.isUniqueUsername(user)) {
        ModelAndView modelAndView = new ModelAndView("redirect:/admin/createnew");
        modelAndView.addObject(bindingResult.getFieldErrors());
        ObjectError objectError = new ObjectError("ERROR", "Username exists!");
        bindingResult.addError(objectError);
        return "user-create";
    }

Je comprends que ma logique est fausse ici car je ne donne pas le résultat de la liaison à la vue "user-create".

<div th:if="${#fields.hasErrors('username')}" th:errors="*{username}">
    <p class="bg-danger text-center">Username error!</p>
</div>

Pour l'instant, je ne peux afficher que les erreurs provenant d'annotations comme @NotNull et @Size. Mais comment puis-je passer l'information à la vue que le serveur dit que le nom d'utilisateur n'est pas unique ?

1voto

Au lieu de l'ObjectError, utilisez l'objet FieldError et ajoutez-le au résultat de la liaison. Validation :

if (influence.getInfluenceImage() == null || influence.getInfluenceImage().isEmpty()) {
    FieldError error = new FieldError("addInfluenceDTO", "influenceImage",
                                      "Influence Image should not be empty.");
    bindingResult.addError(error);
}

De mon point de vue :

<label th:if="${#fields.hasErrors('influenceImage')}" th:class="'error'" th:errors=*{influenceImage} class="col-lg-4 control-label" style="color:red;" ></label>

0voto

cralfaro Points 4416

Je pense que la meilleure approche pour atteindre votre objectif devrait être de faire votre validation personnalisée, puis le flux de la page continuera à être le même.

Je vais vous montrer comment créer votre propre validation (il suffit de créer une annotation et d'implémenter la méthode isValid).

http://codetutr.com/2013/05/29/custom-spring-mvc-validation-annotations/

0voto

Marek Raszewski Points 919

Vous pouvez lier votre erreur à n'importe quel champ.

if (!form.getUsername().isEmpty() && accountService.exists(form.getUsername()))
      bindingResult.rejectValue("username", "error.username", "Username exists!");

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X