表单输入约束没有被强制执行?

时间:2011-05-04 19:23:20

标签: spring tomcat spring-mvc

我是Tomcat和Spring Web的新手。我正在尝试按照this tutorial使用Spring的表单验证功能。一切似乎运行顺利,除了一件事......我的表格没有做任何验证,无论我提供哪种数据,我总是可以在发送表格时进入成功页面。

我是否正确使用了约束?我想强制用户填写他们的名字,并且名字长度至少为两个字符。

package net.devmanuals.form;

import javax.validation.constraints.Size;
import org.hibernate.validator.constraints.NotEmpty;

public class RegistrationForm {
    @NotEmpty(message = "You surely have a name, don't you?")
    @Size(min = 2, message = "I'm pretty sure that your name consists of more than one letter.")
    private String firstName;

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getFirstName() {
        return this.firstName;
    }
}

表格代码:

    <form:form method="post" commandName="regform">
        <p><form:input path="firstName" /> <form:errors path="firstName" /></p>
        <p><input type="submit" /></p>
    </form:form>

控制器:

@Controller
@RequestMapping("/register")
public class RegistrationController {
    @RequestMapping(method = RequestMethod.GET)
    public String showRegForm(Map model) {
        RegistrationForm regForm = new RegistrationForm();
        model.put("regform", regForm);
        return "regform";
    }

    @RequestMapping(method = RequestMethod.POST)
    public String validateForm(@Valid RegistrationForm regForm, BindingResult result, Map model) {
        if (result.hasErrors()) {
            return "regform";
        }

        model.put("regform", regForm);
        return "regsuccess";
    }
}

我是否错误地应用了约束?

1 个答案:

答案 0 :(得分:0)

除了在配置中添加<mvc:annotation-driven/>之外,还需要确保JSR-303 jar在您的类路径中。来自docs

  

[AnnotationDrivenBeanDefinitionParser] ...如果指定则配置验证器,否则默认为默认LocalValidatorFactoryBean 创建的新验证器实例,如果类路径中存在JSR-303 API。