2013-04-29 4 views
0

Pour une raison quelconque, cela ne fonctionne pas. J'ai cherché et essayé toutes les solutions trouvées sur le net. Pas de dé. On dirait qu'il me manque quelque chose.@Valid ne se déclenche pas - Spring MVC 3.2

My Beam:

@Entity 
@Table(name="employees") 
public class Person { 

    private Integer person_id; 
    private String name; 
    private String name2; 
    private String email; 
    private double phone; 
    private String desc; 

    @Id 
    @Max(value=500) 
    @Column (name="id") 
    public Integer getPerson_id() { 
     return person_id; 
    } 

    public void setPerson_id(Integer person_id) { 
     this.person_id = person_id; 
    } 

    @NotNull 
    @NotEmpty 
    @Column (name="fn") 
    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 

    @Column(name="ln") 
    public String getName2() { 
     return name2; 
    } 
    public void setName2(String name2) { 
     this.name2 = name2; 
    } 

    @Email 
    @Column (name="em", unique = true) 
    public String getEmail() { 
     return email; 
    } 
    public void setEmail(String email) { 
     this.email = email; 
    } 

    @Column(name="phone") 
    public double getPhone() { 
     return phone; 
    } 
    public void setPhone(double phone) { 
     this.phone = phone; 
    } 

    @Column (name="de") 
    public String getDesc() { 
     return desc; 
    } 
    public void setDesc(String desc) { 
     this.desc = desc; 
    } 

    public String toString() { 
     return getPerson_id() + " - " + getName() + " - " + getName2() + " - " + getEmail(); 
    } 
} 

Méthode contrôleur qui gère POST:

@RequestMapping(value="/register", method = RequestMethod.POST, headers="Accept=*/*") 
public String registerUer(@javax.validation.Valid Person registerForm, BindingResult br){ 


    System.out.println("Erros?" + br.hasErrors()); 
    if (br.hasErrors()) { 
     System.out.println(br.getAllErrors()); 
    } 
    System.out.println(registerForm); 
    return "thankyou"; 
} 

home.jsp

<form:form action="register.htm" commandName="registerForm" method="post"> 
    Name1: <form:input path="name"/><br /> 
    Name2: <form:input path="name2"/><br /> 
    Email: <form:input path="email"/><br /> 
    Desc: <form:input path="desc" /><br /> 
    Phone: <form:input path="phone" /><br /> 
    <input type="submit" /> 
</form:form> 

contexte d'application fichier xml:

<mvc:annotation-driven /> 
    <context:component-scan base-package="com.springmvcsample"/> 
    <context:annotation-config/> 
    <import resource="hibernate_config.xml"/> 

    <bean id="viewResolver" 
     class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <property name="prefix"> 
    <value>/WEB-INF/views/</value> 
    </property> 
    <property name="suffix"> 
    <value>.jsp</value> 
    </property> 
    </bean> 

    <bean id="contentNegotiationManager"  
     class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean"> 
     <!-- Turn off working out content type based on URL file extension, should fall back 
       to looking at the Accept headers --> 
    <property name="favorPathExtension" value="false" /> 
    </bean> 

    <bean class="org.springframework.context.support.ResourceBundleMessageSource" 
     id="messageSource"> 
    <property name="basename" value="messages" /> 
    </bean> 

Je reçois toujours hasErrors() return false J'ai le fichier hibernate validator (GA jar) dans classspath. Et je vois ceci chargé:

INFO [Version] Hibernate Validator 4.2.0.Final 

Ai-je raté quelque chose?

+0

Pouvez-vous essayer avec des annotations de validation sur les setters? –

+0

Je vais essayer de toute façon. Mais y a-t-il une différence en utilisant les champs vs les setters? –

+0

Vous avez des annotations sur vos getters .. –

Répondre

0

Cela fonctionne comme prévu si je supprime les annotations JPA (car je voulais éviter toute configuration supplémentaire pour DB) et utilisez votre code de formulaire et de contrôleur.

Certainement il y a une pièce manquante, pouvez-vous essayer en faisant un pojo simple avec des annotations de validation et voir.

+0

Aucune base de données n'est impliquée dans mon POJO. Voulez-vous que je supprime l'annotation '@ Column'? –

+0

J'ai commenté les annotations JPA. Mais toujours pas de dés! Je ne sais pas ce que je manque –

+0

Avez-vous essayé ceci et cela a fonctionné pour vous? Peut-être qu'il me manque des pots? (Ne pas utiliser Maven). Mais je suppose que si quelque chose me manque, il devrait apparaître dans le journal/quand je le soumets. –