具有父/子继承关系的Grails i18n验证错误消息

具有父/子继承关系的Grails i18n验证错误消息,grails,gorm,Grails,Gorm,假设我有一个人班。这个人有两个孩子,一个是建筑工人,一个是医生。 Person类带有username属性(就像他们经常做的那样)。当然,通过继承,Builder和Doctor类也有一个用户名 现在我想美化i18n验证消息。我补充说,我认为这将适用于我所有的3门课 person.email.blank=Email is required 但在验证子类的对象时不使用它。如果我添加以下内容 doctor.email.blank=Email is required builder.email.blan

假设我有一个班。这个人有两个孩子,一个是建筑工人,一个是医生。 Person类带有username属性(就像他们经常做的那样)。当然,通过继承,Builder和Doctor类也有一个用户名

现在我想美化i18n验证消息。我补充说,我认为这将适用于我所有的3门课

person.email.blank=Email is required
但在验证子类的对象时不使用它。如果我添加以下内容

doctor.email.blank=Email is required
builder.email.blank=Builder is required
我得到了想要的结果,但它似乎并没有像它可能的那样干燥。
有人对此有什么想法吗。也许我只是做错了什么

我能够通过使用自定义验证器和一条消息来实现这一点,该消息用于所有需要的消息

在属性文件中:

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)]
}
调用validate()后的结果将是“需要电子邮件”和“需要其他属性”


通过在域类之间共享自定义验证器方法,可以重用该方法

我可以通过使用自定义验证器和所有所需消息的单个消息来实现这一点

在属性文件中:

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)]
}
调用validate()后的结果将是“需要电子邮件”和“需要其他属性”


通过在域类之间共享自定义验证器方法,可以重用该方法

如果doctor和builder继承person类的属性,那么除了person.email.blank行之外,您还需要其他内容吗?难道不会使用person.email.blank吗?@JohnMoses我的经验是person.email.blank不被子类使用,相反,如果doctor和builder继承person类的属性,则验证错误默认为Grails默认值,如“字段电子邮件上的类person出错”,除了person.email.blank行之外,你还需要什么吗?不会使用person.email.blank吗?@JohnMoses我的经验是person.email.blank不被子类使用,相反,验证错误默认为Grails默认值,比如“字段email上的类person错误”