2011-03-09 2 views
3

Je n'arrive pas à obtenir une validation basique avec Spring MVC.Spring MVC + Hibernate Validator + Velocity

J'ai la POJO suivante:

public class Example { 

    @NotNull(message="You must enter a value") 
    @Size(min=2, max="2", message="You must enter 2 characters") 
    private String value; 

    public String getValue() { return value; } 
    public void setValue(String value) { this.value = value; } 

} 

Mon contrôleur très basique ressemble à ceci:

@Controller 
@RequestMapping("/value.vm") 
public class ValueController { 

    @Autowired 
    private Validator validator; 

    @RequestMapping() 
    public ModelAndView display(@Valid @ModelAttribute("example") Example e, BindingResult result) { 
     //Details omitted 
    } 

Mon modèle de vitesse est tout aussi simple:

<form target="_self" enctype="application/x-www-form-urlencoded" action="/value.vm" method="post"> 
    #springBind("example") 
    #springFormInput("example.value", "") 
    #springShowErrors("<br />", "") 
</form> 

Mon servlet. Le fichier XML comprend:

<mvc:annotation-driven /> 

Si je valide manuellement une soumission de formulaire vierge (c.-à-d. validator.validate (e)), je vois que mes messages d'erreur sont générés, cependant ils n'existent jamais sur mon BindingResult.

Des idées pour lesquelles mon résultat de liaison n'obtient pas ces erreurs?

Répondre

2

je tort en utilisant:

javax.validation.Validator 

Lorsque je devais être en utilisant

org.springframework.validation.Validator 

Modification de cette version, et modifiant le code de validation:

validator.validate(e, result); 

résolu mon problème.

+1

Si vous souhaitez utiliser la validation javax.validation.Validator et JSR-303, placez une implémentation sur votre chemin de classe, comme hibernate-validator. – GaryF

+0

@GaryF J'ai hibernate-validator sur mon classpath, et c'est ce que j'utilisais. Cependant, les erreurs de validation n'ont pas été placées sur l'objet BindingResult, et #springShowErrors n'affichait rien de mal avec l'entrée de formulaire vide. Est-ce qu'il me manque un autre morceau de configuration? Une fois que j'ai changé l'implémentation de Validation, le ressort affiche correctement les erreurs dans le balisage. – Scott

+0

Votre config m'a l'air bien. Je ne suis pas familier avec la façon dont les balises de modèle de vitesse fonctionnent, mais le côté de ressort semble bon. – GaryF

0

Vous pouvez toujours utiliser l'annotation JSR 303 @Valid pour appeler automatiquement la validation à l'aide de javax.validation.Validator sans l'appeler manuellement.

Cette option est activée par défaut au printemps si vous incluez élément <mvc:annotation-driven/> à votre contexte d'application ou @EnableWebMvc lorsque vous utilisez Java config

Pour que cela fonctionne, vous devez avoir une implémentation pour Bean API Validation par exemple Hibernate Validator

Questions connexes