Grails嵌套域 - 将addAll错误添加到顶级域对象

时间:2011-10-23 16:57:24

标签: java validation grails error-handling

我有一个像这样的Grails域:

class User {
....
Address address
}

在保存用户的同时,我也要验证Address对象,并将Address对象的所有错误添加到User对象本身。

我正在尝试编写一个自定义验证器,其中it.validate(),但我无法找到“addAll”地址错误消息的方法。

2 个答案:

答案 0 :(得分:4)

下面讨论关于在子对象上调用验证的grails邮件列表,并将它们附加到可能适合您的单个错误列表中。

Form validation with children

如果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()

但说实话,我还没有测试过它;)