2011-10-17 63 views
3

我想用Hibernate實現集成的JSR-303驗證使用Spring來驗證表單。我有一個「確認電子郵件」(emailConf)字段,我想確認它等於email字段。我看到有人的帖子做這樣的:Spring MVC 3驗證註釋 - 確認電子郵件

public class ContactInfoForm { 

    @NotEmpty 
    private String name; 

    @NotEmpty 
    @Email 
    private String email; 

    @Expression(value = "emailConf= email", applyIf = "emailConf is not blank") 
    private String emailConf; 

    ... 
} 

然而,這emailConf驗證不工作時(即當字段不匹配不會發生錯誤)。我見過幾個教程,顯示了類似的註釋,但無法找到它們或任何有關它如何工作的文檔。有沒有人知道通過註釋驗證「確認電子郵件/密碼」字段的方法?我目前正在使用替代方案,即執行Validator並驗證validate方法中的確認字段。

+0

「@ Expression」註釋來自哪裏? – Ralph

+0

我沒有意識到這一點,但@Expression註釋來自「spring-modules」,我甚至沒有意識到它仍然在我的類路徑中。當我最初遵循一個驗證教程時,我把它放在了我的classpath中,但最終使用了JSR-303和Hibernate Validator。我對spring-modules不是很熟悉,但SpringSource的論壇頁面從2010年8月發佈了一個聲明,聲明「春季模塊論壇退出了Spring Extensions」。如果不再支持,我寧願不使用這個庫。 –

回答

1

請問你應該看看這個question and its answers:有很多方法討論如何做這樣的驗證(它是關於密碼和密碼確認,但問題是相同的)。

+1

我正在使用基於FieldMatch驗證器的實現,它工作得很好。 – digitaljoel

+0

我看了一下頁面,那裏有一些非常好的資源。我無法弄清楚的一件事是如何將類級約束的結果與我表單的特定字段相關聯。如果電子郵件不匹配,我希望我的jsp將該錯誤輸出爲emailConf字段的錯誤。我目前使用彈簧形式輸出錯誤:errors tag:'' –

+0

感謝您的資源。自定義FieldMatch註釋似乎是一個很好的方法。我也能夠得到scriptassert爲我的需要工作,但我的代碼有點混亂得到錯誤綁定到適當的表單域。最後,我只是放棄了註釋,然後去了一個自定義的驗證器類。如果我有更多的時間,我會嘗試這些其他解決方案。謝謝! –

1

如果您想比較同一類的2個字段,您需要的是一個"Class-level constraint"(如JSR-303所述)。我不認爲你的@Expression會這樣工作。