請你幫幫我嗎?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),你能解釋一下我爲什麼他們不這樣做在我的結果對象?