2014-09-12 1 views
0

Say my commande ressemble à cecivalidation du formulaire de printemps dans l'objet

public class MyForm { 
    @Max(99) 
    private int mode; 
    private MyObj myObj; 

et mon MyObj est

public class MyObj { 
    private String myStr; 
    private int myInt; 

et mon contrôleur ressemble à ceci

@Controller 
public class MyController { 
    @RequestMapping(value = "/Anything.htm") 
    public String AnythingMethod(@Valid MyForm myForm, ..... 

et mon JSP ressemble cette

<form:input path="mode"/> 
<form:input path="myObj.myStr"/> 

Comment puis-je injecter une validation telle que @NotNull @MAx @Min pour myStr et myInt? comment puis-je spécifier leurs messages d'erreur dans messages.properties? S'il vous plaît aider.

+0

Pourquoi ne pouvez-vous pas simplement ajouter ces annotations à ces variables membres comme vous l'avez fait pour 'MyForm.mode'? –

+0

@isim, Cela n'a pas fonctionné même avec l'injection de validation dans MyObj. Si j'utilise '@Valid MyForm' dans le contrôleur, il ne valide que MyForm.mode, pas MyObj.myInt. Si j'utilise '@Valid MyObj' dans le contrôleur, il valide uniquement MyObj.myInt, pas MyForm.mode. – senderj

Répondre

1

Incertain si les codes postés dans votre question sont complets, il se peut que vous manquiez quelques annotations. Aussi, puisque vous avez mentionné dans votre commentaire que les validations sur certains des autres champs fonctionnent, je vais supposer que vous avez tous les dependencies sorted out.

Donc, essayez ceci:

Dans votre MyForm classe:

public class MyForm { 
    @Max(99, message="{myform.mode.max}") 
    private int mode; 

    @Valid // add @valid annotation 
    private MyObj myObj; 

Dans votre MyObj classe:

public class MyObj { 
    @NotBlank(message="{myobj.mystr.notnull}") 
    private String myStr; 

    @Max(/* some value */, message="{myobj.mystr.max}") 
    @Min(/* some value */, message="{myobj.mystr.min}") 
    private int myInt; 

Dans votre classe MyController:

@Controller 
public class MyController { 
    @RequestMapping(value = "/Anything.htm") /* add @ModelAttribute annotation */  
    public String AnythingMethod(@Valid @ModelAttribute('myForm') MyForm myForm, .....) 

Pour spécifier les messages d'erreur dans un fichier .properties, placez-les tous dans un fichier ValidationMessages.properties et ajoutez ce fichier à la racine de votre chemin de classe. (Par exemple, /WEB-INF/classes, resources dossier etc.).

Espérons que cela aide.

+0

merci pour votre aide. Problème résolu. Je ne sais pas comment utiliser @Valid sur myObj. Cependant, je ne suis pas capable de faire le message = travail parmis. J'ai ajouté 'myobj.mystr.max = myInt invalid' dans messages.properties du printemps (où mes autres msg sont et travaillent). J'ai également suivi la configuration du validateur d'hibernate, en ajoutant ValidationMessges.properties à WEB-INFO \, avec la même chaîne msg. Mais les deux donnent mon '{myobj.mystr.max}' comme message. Y a-t-il quelque chose que j'ai manqué? – senderj

+1

@senderj Tous les messages d'erreur de validation doivent aller dans 'ValidationMessages.properties'. Vous pouvez ajouter ce fichier là où vous stockez votre fichier 'messages.properties'. Aussi, gardez à l'esprit, c'est 'WEB-INF', pas' WEB-INFO'. –

+0

Désolé, WEB-INFO était une faute de frappe. L'explorateur de projet NetBeans n'expose que WEB-INF, donc ValidationMessages.properties a été ajouté à WEB-INF, pas à WEB-INF/classes. Je dois utiliser un script ant pour copier. Existe-t-il une méthode de configuration xml pour spécifier le nom et l'emplacement du fichier? – senderj