2012-08-09 42 views
2

可以說我有一個類。人有兩個孩子生成器醫生。 Person類帶有用戶名屬性(就像他們經常這樣做)。當然,繼承Builder和Doctor類也有一個用戶名。Grails i18n驗證與父母/子女繼承關係的錯誤消息

現在我想美化i18n驗證信息。我添加以下以爲它會應用到我的班

person.email.blank=Email is required 

的所有3,但驗證子類的對象,當它不被使用。如果我添加以下內容

doctor.email.blank=Email is required 
builder.email.blank=Builder is required 

我得到了期望的結果,但它似乎不像DRY那樣。 有沒有人對此有任何想法。也許我只是在做錯事!

+0

怎麼樣:email.blank? – heikkim 2012-08-09 11:23:18

+0

如果醫生和建築師是繼承人類的屬性,你會甚至需要除了person.email.blank行之外的任何其他東西嗎?不會使用person.email.blank嗎? – 2012-08-14 22:14:37

+0

@JohnMoses我的經驗是,person.email.blank沒有被子類使用,而是驗證錯誤默認爲Grails默認的類似「錯誤與類人在現場電子郵件」 – 34m0 2012-08-20 08:19:58

回答

0

我能夠通過使用自定義驗證程序和單個消息來實現所有必需的消息。

屬性文件中:

default.isRequired= {3} is required 
email=Email 
otherProperty=Other property 

域類:

email validator: {val, obj -> obj.isRequiredValidator(val, "email") } 
email validator: {val, obj -> obj.isRequiredValidator(val, "otherProperty") } 

private isRequiredValidator(val, key) { 
    if (!val) 
    return [default.isRequired, messageSource.getKey(key)] 
} 

結果調用驗證(後)將 「通過電子郵件要求」 和 「其他屬性是必需的」

您可以通過在域類之間共享自定義驗證程序方法來重複使用該自定義驗證程序方法。