【问题标题】:@Valid is not triggering - Spring MVC 3.2@Valid 没有触发 - Spring MVC 3.2
【发布时间】:2013-04-29 03:53:27
【问题描述】:

由于某种原因,它不起作用。我搜索并尝试了在网上找到的所有解决方案。没有骰子。看来我错过了什么。

我的光束:

@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 我的类路径中有休眠验证器(GA jar)文件。我看到这个加载了:

  INFO  [Version] Hibernate Validator 4.2.0.Final

我错过了什么吗?

【问题讨论】:

  • 你可以尝试在 setter 上使用验证注解吗?
  • 无论如何都会尝试的。但是使用字段和设置器有区别吗?
  • 你的吸气剂上有注释..
  • 我忘了,setters 上已经有注释了。 :-)

标签: java spring validation spring-mvc


【解决方案1】:

如果我删除 JPA 注释(因为我想避免进一步配置 db)并使用您的表单和控制器代码,它会按预期工作。

肯定有一些缺失的部分,你可以尝试通过验证注释制作一个简单的 pojo 并查看。

【讨论】:

  • 我的 POJO 中根本不涉及数据库内容。要我删除@Column 注释吗?
  • 我注释掉了 JPA 注释。但还是没有骰子!我不知道我错过了什么
  • 你试过这个并且它对你有用吗?也许我错过了一些罐子? (不使用 Maven)。但我想如果我遗漏了什么,它应该会在日志中/我提交时弹出。
  • 是的,我试过你的代码,它运行良好。您可以查看github.com/SpringSource/spring-mvc-showcase 项目。我一直把它作为一个副项目,这样我就可以尝试不同的功能。
  • 您能告诉我如何使用您的示例应用程序吗?是否有关于如何设置和使用它的简短说明?需要任何数据库吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-15
  • 2011-06-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多