2012-06-26 155 views
1

我使用基于表单验证的Spring注解(主要是@NotBlank和@Length),它非常好用。我经过的formbean进入验证方法,像这样:基于Spring注解的表单验证

validate(formBean, result); 

我具有附接到其从一个预期除了验证各种表单字段几个注释。

我的一个形式豆田的声明,像这样:

private EntriesBean entries; 

此字段显然是指具有通常的getter和setter的bean。这个bean中的几个字段也有附加的验证注释,但它们不像其他字段那样作为validate()方法调用的一部分进行验证。这是否与这个bean从另一个bean引用而不是直接来自调用validate()的方法有关?

感谢

回答

0

回答我自己的问题。

阅读很长的文档,我可以看到,要做到这一点的方法是使用pushNestedPath()和popNestedPath()像这样的BindingResult对象的方法:

result.pushNestedPath("entries"); 
    validator.validate(form.getEntries(), result); 
    result.popNestedPath(); 

我不喜欢这这样做的方式,因为它看起来相当凌乱,但它的工作原理,它似乎

0

您可以验证“项”字段是这样的:

@Valid 
private EntriesBean entries; 

这将使Hibernate验证级联的验证在豆

+0

这与pushNestedPath的方式做比较呢?他们中的一个比另一个“更好的做法”? – csilk

+0

我不确定Spring如何验证这些方法,我给你的方法是使用HibernateValidator,我不确定它是否可以与你的方法一起使用。我认为这是因为@Valid是javax.validation包中的标准注释。你可以看看http://docs.jboss.org/hibernate/validator/4.0.1/reference/en/html/validator-usingvalidator.html – gcesarmza

+0

我试着从javax库中使用@Valid,但它没有触发嵌套bean上的验证注释。我一直坚持我目前的做法,因为我找不到使用Spring以其他方式工作的示例。 – csilk