2012-01-06 72 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只验证控制器方法参数的默认组。