2012-06-26 149 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