2014-04-23 25 views
1

我想我的自定義錯誤消息,以下列方式:如何訪問JSR-303消息中的字段值?

假設一個Person類的聲明如下:

@Size(min=10, max=200, message="{name.size}") 
private String name; 

在在ValidationMessages.properties聲明的錯誤信息,我想輸出領域價值爲好,即我願做這樣的事情:

name.size=The name '{name}' is invalid, its size must be between {min} and {max} 

假定場「名稱」的內容是「ABC」。那麼錯誤信息應該是這樣的:

名字「ABC」是無效的,它的大小必須在10和200

之間

用於分鐘的替代最高的作品,但我怎麼能做到這一點的字段值?

回答

5

With BeanValidation 1.0我認爲有一種方法可以使用消息interpolater獲取值。我相信在使用bean驗證1.0的hibernate實現時,這是作爲其捆綁包的一部分提供的。

通過使用BeanValidation 1.1,它可以通過EL表達式獲得。字段值現在可以通過名稱validatedValue訪問。如果你可以嘗試使用最新版本。你的消息是這樣的:

name.size=The name '${validatedValue}' is invalid, its size must be between {min} and {max} 
+0

這是一個很好的提示。 我從Spring 3.x升級到4.x. 然後,我添加/升級​​到以下構件: javax.el javax.el-API 2.2.5 org.glassfish.web javax.el 2.2.6 javax.validation validation- API 1.1.0.Final org.hibernate作爲 休眠-驗證 5.1.0.Final – Horowitzathome

+0

讓我分享與此相關的另一個問題:我使用的春天,我的自定義驗證程序裏面執行我使用的是自動裝配功能。從Junit案例我首先直接驗證,然後堅持實體經理再次驗證的實體。直接在自定義驗證程序中驗證autowire的工作時,它不適用於通過實體管理器間接調用它。爲了使這個工作,你必須通過EntityManagerFactory的javax.persistence.validation.factory屬性指定Spring的LocalValidatorFactoryBean。 – Horowitzathome

+0

我在這個場景中沒有遇到任何問題,但我不使用Spring,我只是堅持開箱即用JEE – ZeusSelerim