2012-08-09 150 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)] 
} 

结果调用验证(后)将 “通过电子邮件要求” 和 “其他属性是必需的”

您可以通过在域类之间共享自定义验证程序方法来重复使用该自定义验证程序方法。