2013-04-29 81 views
0

由于某种原因,它不起作用。我搜索并尝试了网络上找到的所有解决方案。没有骰子。看起来我错过了一些东西。@Valid不触发 - Spring MVC 3.2

我梁:

@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(); 
    } 
} 

控制器的方法来处理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> 

应用程序上下文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> 

我总是得到hasErrors() return false 我在我的classspath中有hibernate validator(GA jar)文件。我看到这个加载:

INFO [Version] Hibernate Validator 4.2.0.Final 

我错过了什么吗?

+0

你可以尝试使用setter上的验证注释吗? – 2013-04-29 04:51:56

+0

反正会试试。但是在领域vs设置者上有什么不同? – 2013-04-29 14:59:28

+0

你对你的获得者有注释.. – 2013-04-29 15:12:25

回答

0

它工作正常,如果我删除JPA批注(因为我想避免进一步的数据库配置)并使用您的表单和控制器代码。

绝对有一些缺失的部分,你可以尝试做一个简单的pojo验证注释和看看。

+0

在我的POJO中根本没有涉及数据库的东西。你想要我删除'@ Column'注释吗? – 2013-04-29 15:00:17

+0

我注释掉了JPA注释。但仍然没有骰子!我不知道我在想什么 – 2013-04-29 15:38:51

+0

你试过这个,它对你有用吗?也许我错过了一些罐子? (不使用Maven)。但我猜如果我错过了某些东西,它应该在日志/提交时弹出。 – 2013-04-29 15:42:53