Command Object и hasmany

Я пытаюсь использовать commandObject проверять мои данные при отправке формы. Могу ли я проверить отношение hasMany в commandObject, Мой кенарий примерно такой.

Буксировка простая classes Имеет много отношений:

class Book{
    String nameBook
}

class Author{
    String nameAuthor
    static hasMany = [books:Book]    
}

просто commandObject с hasMany, что я хочу проверить, когда отправить форму.

@grails.validation.Validateable
class MyValidateCommand{

    String nameAuthor
    static hasMany = [books:Book]


    static constraints = {
        nameAuthor nullable:false
        books nullable:false
    }

}

Ps: я знаю, что этот commandObject неправильный, он не компилируется. Но могу ли я сделать что-то подобное???

2 ответа

Решение

hasMany в GORM используется для ассоциации в доменных объектах. В случае объектов команд будет разумным подходом иметь разные объекты команд для каждого домена (например: AuthorCommand а также BookCommand) и объект команды будет выглядеть так:

import org.apache.commons.collections.list.LazyList
import org.apache.commons.collections.functors.InstantiateFactory

//Dont need this annotation if command object 
//is in the same location as the controller
//By default its validateable
@grails.validation.Validateable
class AuthorCommand{
    String nameAuthor
    //static hasMany = [books:Book]

    //Lazily initialized list for BookCommand
    //which will be efficient based on the form submission.
    List<BookCommand> books = 
            LazyList.decorate(new ArrayList(), 
                              new InstantiateFactory(BookCommand.class))

    static constraints = {
        nameAuthor nullable:false
        books nullable:false

        //Let BookCommand do its validation, 
        //although you can have a custom validator to do some 
        //validation here.
    }
}

Не уверен, почему вы не можете попробовать как (нормальное объявление hasMany hibernate)

class MyValidateCommand{

    String nameAuthor
    Set<Book> books= new HashSet<Book>();


    static constraints = {
        nameAuthor nullable:false
        books nullable:false
    }

}
Другие вопросы по тегам