2010-11-15 4 views
5

J'utilise Spring 3 et JSR 303. J'ai un objet backing de formulaire dont les objets imbriqués doivent être validés. Dans l'exemple ci-dessous, comment puis-je valider formObject.getFoo(). GetBean()? Lorsque j'exécute le code ci-dessous, le paramètre résultat est toujours vide, même si la page HTML ne fournit rien, lorsque la validation échoue. Notez que cela fonctionne (c'est-à-dire que la validation échoue) lorsque je le valide manuellement en appelant validate(formObject.getFoo().getBean(), Bean.class).Spring MVC et JSR 303

@Controller 
public class FormController { 
    @RequestMapping(method = RequestMethod.POST) 
    public void process(HttpServletRequest request, @Valid FormObject formObject, BindingResult result) { 
      ... 
    } 

    // This is the class that needs to be validated. 
    public class Bean { 
     @NotBlank 
     private String name; 
    } 

    public class Foo { 
     private Bean bean; 
    } 

    public class FormObject { 
     private Foo foo; 
    } 
} 

Répondre

12

Si vous voulez la validation en cascade vers le bas dans un objet enfant, alors vous devez mettre l'annotation @Valid sur le terrain dans l'objet parent:

public class Bean { 
    @NotBlank 
    private String name; 
} 

public class Foo { 
    @Valid 
    private Bean bean; 
} 

public class FormObject { 
    @Valid 
    private Foo foo; 
} 
+0

Merci, mais pas de chance ici. –

+0

@Tom - Fonctionne pour moi et est dans les spécifications. Quelle implémentation utilisez-vous? – GaryF

+0

Oops, mon mauvais. Ça marche. Merci! –

Questions connexes