我有一个像这样的Grails域:
class User {
....
Address address
}
在保存用户的同时,我也要验证Address对象,并将Address对象的所有错误添加到User对象本身。
我正在尝试编写一个自定义验证器,其中it.validate()
,但我无法找到“addAll”地址错误消息的方法。
答案 0 :(得分:4)
下面讨论关于在子对象上调用验证的grails邮件列表,并将它们附加到可能适合您的单个错误列表中。
如果Address有static belongsTo = [user:User]
,那么调用User.validate()或User.save()也应该在Address上调用验证。我没有尝试将子对象上的错误收集到父对象的错误列表中,但是对于一个简单的一对一关联,您可能不需要,只需显示如下错误:
<g:if test="${user?.hasErrors() || user.address?.hasErrors()}">
<div class="errors">
<g:hasErrors bean="${user}">
<g:renderErrors bean="${user}" as="list" />
</g:hasErrors>
<g:hasErrors bean="${user?.address}">
<g:renderErrors bean="${user?.address}" as="list" />
</g:hasErrors>
</div>
</g:if>
答案 1 :(得分:2)
由于这可能是一个前端相关的任务,我不会试图摆弄这些错误类。我提前你只需在自定义验证器中调用validate函数,如下所示:
address(validator: { val, obj ->
val?.validate();
});
在GUI中,您将在嵌套域类的实例中找到嵌套域类的错误消息。因此,您需要将域类传递给GSP。
<g:renderErrors bean="${address}" field="street" />
但是,如果你真的想要获得一个包含所有嵌套类中所有错误的新集合,你可以查看插件http://www.grails.org/plugin/extended-validation。使用此插件,您有一个额外的错误集,其中包含嵌套域类的所有错误消息(如果配置为这样做):
user.allErrorsRecursive()
但说实话,我还没有测试过它;)