请你能帮帮我吗?
我遇到了Hibernate验证器/ Spring 3 MVC的问题,无法通过组进行验证。
在我的 spring-config.xml :
中 <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" />
我的要验证的bean 是:
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 ...
}
在我的 Spring Controller 中,我将javax.validation.Validator强制转换为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);
}
在这里,我的题词网行动:
@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 :(得分:0)
正如我所知,Spring只验证控制器方法参数的默认组。