2012-01-06 34 views
0

請你幫幫我嗎?Spring MVC的Hibernate驗證器組

我有一個Hibernate驗證器/ Spring 3 MVC驗證組的驗證問題。

在我春天-config.xml中

<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" /> 

豆驗證是:

package fr.test.front.form; 

import javax.validation.constraints.Pattern; 

import org.hibernate.validator.constraints.NotBlank; 

import fr.test.front.constraints.ConstraintsProfessionnel; 
import fr.test.front.constraints.FieldMatch; 

@FieldMatch.List({ 
    @FieldMatch(first = "password", second = "passwordConfirm", message = "Les mots de passe ne correspondent pas") 
}) 
public class InfoPersoForm { 

    // Commons attributs 
    @NotBlank 
    private String clientType; 

    @Pattern(regexp = "(([\\w\\-\\.]+)([\\w]+))@((([\\w\\-]+\\.)+)([a-zA-Z]{2,4}))") 
    @NotBlank 
    private String email; 

    @Pattern(regexp = "[a-zA-Z0-9]*") 
    @NotBlank 
    private String password; 

    @NotBlank 
    private String passwordConfirm; 

    @NotBlank 
    private String civilite; 

    @NotBlank 
    private String nom; 

    @NotBlank 
    private String prenom; 

    @NotBlank 
    private String codePostal; 

    @NotBlank 
    private String offresCommerciales; 

    @NotBlank 
    private String offresCommercialesPartenaire; 

    // No Constraint 
    private String nomNaissance; 
    private String jourNaissance; 
    private String moisNaissance; 
    private String anneeNaissance; 


    // Attributs for professionnal 
    @NotBlank(groups = ConstraintsProfessionnel.class) 
    private String raisonSociale; 

    @NotBlank(groups = ConstraintsProfessionnel.class) 
    private String secteurActivite; 

    @NotBlank(groups = ConstraintsProfessionnel.class) 
    private String entiteeJuridique; 

    // getters and setters ... 
} 

在我春天控制器,我投了javax.validation。 Validator to org.springframework.validation.Validator以綁定結果約束。我想看到我的結果視圖驗證的錯誤:

@InitBinder 
public void initBinder(WebDataBinder binder) { 

    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); 
    binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true)); 
    binder.setValidator((org.springframework.validation.Validator)validator); 
} 

在這裏,我inscriptionWeb行動:

@RequestMapping(value="inscriptionWeb", method = RequestMethod.POST) 
public String createCompteInternetService(@ModelAttribute("infoPersoForm") @Valid InfoPersoForm infoPersoForm, BindingResult result, SessionStatus status, Model model) { 

    Set<ConstraintViolation<InfoPersoForm>> constraintViolations = validator.validate(infoPersoForm); 

    //printing the results 
    for (ConstraintViolation<InfoPersoForm> constraintViolation : constraintViolations) { 
     System.out.println(constraintViolation.getPropertyPath() + " -> " + 
       constraintViolation.getMessage() + " " + constraintViolation.getMessageTemplate()); 
    } 

    System.out.println(""); 
    System.out.println("----- Using Group -----"); 
    System.out.println(""); 

    constraintViolations = validator.validate(infoPersoForm, ConstraintsProfessionnel.class); 

    //printing the results 
    for (ConstraintViolation<InfoPersoForm> constraintViolation : constraintViolations) { 
     System.out.println(constraintViolation.getPropertyPath() + " -> " + constraintViolation.getMessage()); 
    } 


    if(infoPersoForm.getClientType() != null && infoPersoForm.getClientType().equals(DonneesReferencesInvariantes.CLIENT_TYPE_PROFESSIONNEL_VALUE)) 
     validator.validate(infoPersoForm, ConstraintsProfessionnel.class); 
    else 
     validator.validate(infoPersoForm); 

    if (result.hasErrors()) { 
     // return error view 
    } 
    else { 
     // return success view 
    } 
} 

第一個問題,我只有一個constraintsProfessionnel(raisonSociale)在我驗證組結果(請參閱我的結果控制檯之後),爲什麼?

其他約束專業人員(secteurActivite和entiteeJuridique)? 他們沒有在我的約束錯誤:

19:29:42,128 INFO [STDOUT] codePostal -> ne peut pas être vide {org.hibernate.validator.constraints.NotBlank.message} 
19:29:42,128 INFO [STDOUT] offresCommerciales -> ne peut pas être vide {org.hibernate.validator.constraints.NotBlank.message} 
19:29:42,129 INFO [STDOUT] email -> doit suivre "(([\w\-\.]+)([\w]+))@((([\w\-]+\.)+)([a-zA-Z]{2,4}))" {javax.validation.constraints.Pattern.message} 
19:29:42,129 INFO [STDOUT] email -> ne peut pas être vide {org.hibernate.validator.constraints.NotBlank.message} 
19:29:42,129 INFO [STDOUT] passwordConfirm -> ne peut pas être vide {org.hibernate.validator.constraints.NotBlank.message} 
19:29:42,129 INFO [STDOUT] prenom -> ne peut pas être vide {org.hibernate.validator.constraints.NotBlank.message} 
19:29:42,129 INFO [STDOUT] offresCommercialesPartenaire -> ne peut pas être vide {org.hibernate.validator.constraints.NotBlank.message} 
19:29:42,129 INFO [STDOUT] civilite -> ne peut pas être vide {org.hibernate.validator.constraints.NotBlank.message} 
19:29:42,129 INFO [STDOUT] nom -> ne peut pas être vide {org.hibernate.validator.constraints.NotBlank.message} 
19:29:42,129 INFO [STDOUT] password -> ne peut pas être vide {org.hibernate.validator.constraints.NotBlank.message} 
19:29:54,803 INFO [STDOUT] ----- Using Group ----- 
19:29:54,812 INFO [STDOUT] codePostal -> ne peut pas être vide 
19:29:54,812 INFO [STDOUT] offresCommerciales -> ne peut pas être vide 
19:29:54,812 INFO [STDOUT] email -> doit suivre "(([\w\-\.]+)([\w]+))@((([\w\-]+\.)+ 
([a-zA-Z]{2,4}))" 
19:29:54,812 INFO [STDOUT] email -> ne peut pas être vide 
19:29:54,812 INFO [STDOUT] passwordConfirm -> ne peut pas être vide 
19:29:54,812 INFO [STDOUT] prenom -> ne peut pas être vide 
19:29:54,812 INFO [STDOUT] offresCommercialesPartenaire -> ne peut pas être vide 
19:29:54,813 INFO [STDOUT] raisonSociale -> ne peut pas être vide 
19:29:54,813 INFO [STDOUT] civilite -> ne peut pas être vide 
19:29:54,813 INFO [STDOUT] nom -> ne peut pas être vide 
19:29:54,813 INFO [STDOUT] password -> ne peut pas être vide 

第二個問題,我的結果對象只默認的約束,而不是ConstraintsProfessionnel(raisonSociale,secteurActivite和entiteeJuridique),你能解釋一下我爲什麼他們不這樣做在我的結果對象?

回答

0

正如我所知,Spring只驗證控制器方法參數的默認組。