Как сохранить несколько объектов из одного вида, используя Grails - PullRequest
0 голосов
/ 08 января 2012

Этот вопрос есть в ответе на этот пост Grails один ко многим вид отношений

В предложенном примере не работает и выдает следующее исключение во время выполнения

null id in blog.omarello.Phone entry (don't flush the Session after an exception occurs). Stacktrace follows:
Message: null id in blog.omarello.Phone entry (don't flush the Session after an exception occurs)
   Line | Method
->>  43 | doCall  in blog.omarello.ContactController$_closure4$$ENLORkU6
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
|   886 | runTask in java.util.concurrent.ThreadPoolExecutor$Worker
|   908 | run . . in     ''
^   662 | run     in java.lang.Thread

Я думаю, что вместо того, чтобы заставить пример работать, любой может помочь мне понять, как я могу создать GSP, который может позволить мне сохранять несколько экземпляров одного и того же класса домена. Например, GSP, который позволяет мне вставлять несколько экземпляров Book одновременно?

Ответы [ 2 ]

2 голосов
/ 09 января 2012

Еще раз, изучите проект, который я связал на github . Это демонстрация некоторых из лучших практик для этого. В частности, посмотрите на вопрос / индекс , поскольку именно так может выглядеть представление. Фактическая часть сохранения выполняется в QuestionService , используемом QuestionController . Этот проект делает точно то, что вы пытаетесь сделать. Просмотрите его.

0 голосов
/ 03 февраля 2012

Измените класс Contact в примере с телефоном следующим образом, и он должен работать нормально.

package blog.omarello

import org.apache.commons.collections.list.LazyList;
import org.apache.commons.collections.FactoryUtils;

class Contact {

    static constraints = {
        firstName(blank:false)
        lastName(blank:false)
    }

    String firstName
    String lastName
    String nickName


 List phones = LazyList.decorate(new ArrayList(),
                                  FactoryUtils.instantiateFactory(Phone.class));


//    List phones = new ArrayList()
    static hasMany = [ phones:Phone ]

    static mapping = {
        phones cascade:"all-delete-orphan"
    }

//    def getPhonesList() {
//        return LazyList.decorate(
//              phones,
//              FactoryUtils.instantiateFactory(Phone.class))
//    }

    def String toString() {
        return "${lastName}, ${firstName}"
    }
}
...