2009-12-09 1 views
9

В моем Grails приложении У меня есть внешний командный объект, который содержит список других командных объектов:Grails: вложенные объекты команды

public class OuterCommand { 

    List<InnerCommand> innerCommands = ListUtils.lazyList([], FactoryUtils.instantiateFactory(InnerCommand)) 
} 

class InnerCommand { 
    String code 
    Long id 
    String value 

    static constraints = { 
     code(nullable: false, blank: false) 
     value(nullable: false, blank: false) 
    } 
} 

Довольно необычная конкретизация innerCommands основана на this advice. Тем не менее, я нахожу, что если я вызываю validate() на экземпляр OuterCommand, проверка не проверяет содержащиеся в нем экземпляры InnerCommand.

Можно ли встраивать объекты команд и иметь весь граф объектов команды, проверенных при вызове validate() на внешний объект?

Спасибо, Дон

ответ

0

Я не думаю, что домен объектов в Command или вложенных командах получают проверенные по умолчанию, вы должны написать a validator, что петли через innerCommands и проверяет их всех.

static constraints = { 
    innerCommands(validator:{val,obj -> 
     //validate and merge errors from each innerCommand 
    }) 
} 

Возможно, вам придется обрабатывать объект Errors и объединить все результаты вместе, но это не так сложно.

+0

это до сих пор так? – dbrin

8

я получил эту работу, выполнив следующие действия:

сделать внутренний объект команды подтверждаемым, так как он не получает экземпляр как обычный объект команды. Есть два способа сделать это, с @org.codehaus.groovy.grails.validation.Validateable аннотацию, или с Grails конфигурации параметра grails.validateable.classes

Добавление пользовательского валидатора для innerCommands в OuterCommand

static constraints = { 
    innerCommands(validator: {val, obj -> 
     // 'attributes.validation.failed' is the key for the message that will 
     // be shown if validation of innerCommands fails 
     return val.every { it.validate() } ?: ['attributes.validation.failed'] 
    }) 
} 
+0

См. Http://old.nabble.com/validating-nested-command-objects-td26714921.html#a26715507 для обсуждения. –

+0

это все еще так? – dbrin

 Смежные вопросы

  • Нет связанных вопросов^_^