2011-03-09 82 views
3

我似乎无法获得使用Spring MVC的基本验证。Spring MVC + Hibernate Validator + Velocity

我有以下POJO:

public class Example { 

    @NotNull(message="You must enter a value") 
    @Size(min=2, max="2", message="You must enter 2 characters") 
    private String value; 

    public String getValue() { return value; } 
    public void setValue(String value) { this.value = value; } 

} 

我非常基本的控制器是这样的:

@Controller 
@RequestMapping("/value.vm") 
public class ValueController { 

    @Autowired 
    private Validator validator; 

    @RequestMapping() 
    public ModelAndView display(@Valid @ModelAttribute("example") Example e, BindingResult result) { 
     //Details omitted 
    } 

我Velocity模板同样简单:

<form target="_self" enctype="application/x-www-form-urlencoded" action="/value.vm" method="post"> 
    #springBind("example") 
    #springFormInput("example.value", "") 
    #springShowErrors("<br />", "") 
</form> 

我的servlet。 xml文件包括:

<mvc:annotation-driven /> 

如果我手动验证空白表单提交(即, validator.validate(e)),我看到我的错误消息正在生成,但它们在我的BindingResult中不存在。

任何想法为什么我的绑定结果没有得到这些错误?

回答

2

我被误用:

javax.validation.Validator 

当我需要使用

org.springframework.validation.Validator 

更改为这个版本和修改验证码:

validator.validate(e, result); 

解决了我问题。

+1

如果您想使用javax.validation.Validator和JSR-303验证,请将类实现放在类路径中,如hibernate-validator。 – GaryF 2011-03-10 14:04:56

+0

@GaryF我在我的类路径上有hibernate-validator,这就是我正在使用的。然而,验证错误没有放回到BindingResult对象上,随后的#springShowErrors没有显示任何空白表单输入错误。 我错过了一些其他的配置?一旦我更改了验证实现,spring会正确显示标记中的错误。 – Scott 2011-03-10 15:53:17

+0

你的配置对我来说看起来很好。我不熟悉速度模板标签的工作原理,但Spring侧看起来不错。 – GaryF 2011-03-10 16:55:19

0

您仍然可以使用JSR 303 @Valid注释来自动调用使用javax.validation.Validator的验证,而无需手动调用它。

这是默认启用的弹簧如果包括<mvc:annotation-driven/>元素添加到应用程序上下文或@EnableWebMvc当您使用Java的配置

对于这个工作,你需要为Bean验证API,例如Hibernate验证器的实现

相关问题