Grails:懒惰列表的问题

时间:2013-06-04 22:05:52

标签: grails master-detail

我有一个网页,允许用户输入数据,这些数据在存储到我的数据库时将形成主/明细关系。我将数据提交给Grails控制器,该控制器将数据绑定到命令对象。由于我不知道将提交多少“详细”行,我试图使用惰性列表将详细数据绑定到。我失败了。

我的命令对象如下:

String title    
List testItems = LazyList.decorate(new ArrayList(),
                                   FactoryUtils.instantiateFactory(VocabQuestion.class));

当我提交表单时,我得到以下异常:

| Error 2013-06-04 22:42:54,068 [http-bio-8080-exec-4] ERROR errors.GrailsExceptionResolver  - MissingMethodException occurred when processing request: [POST] /*****/vocabulary/save - parameters:
testItems[1].question: Q2
title: Test
testItems[0].answer: A1
testItems[0].question: Q1
testItems[0].vocabulary_test_id: 
testItems[1].answer: A2
create: Create
No signature of method: vocabularytest.TestCreationCommand.propertyMissing() is applicable for argument types: () values: []
Possible solutions: propertyMissing(java.lang.String). Stacktrace follows:
Message: No signature of method: vocabularytest.TestCreationCommand.propertyMissing() is applicable for argument types: () values: []
Possible solutions: propertyMissing(java.lang.String)
    Line | Method
->>  102 | <init>    in vocabularytest.TestCreationCommand

此异常很快发生在对象生命周期中,可能是因为Grails尝试将数据绑定到它。

如果我将命令对象定义为:

String title    
List testItems = [new VocabQuestion()]

并且只从表单提交1条详细记录,然后一切都按预期工作。

我哪里错了?

EDIT 我的VocabQuestion域类是

package vocabularytest
class VocabQuestion {

    static constraints = {

    }

    static belongsTo = [vocabularyTest: VocabularyTest]

    String question
    String answer

}

1 个答案:

答案 0 :(得分:1)

我找到了答案(可能不是答案,但确实有效)

我使用了后来Groovy版本中的本机LazyList语法,如下所示。

List testItems = [].withLazyDefault {new VocabQuestion()}