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
}
}