3

我有一个设计如下的问题域模型

class Question {

    List<Choice> choiceCollection;

    static hasMany = [choiceCollection:Choice]
    static mappping = {
        choiceCollection(joinTable:false)
    }

}

为了满足我的需求,/grails-app/views/question/create.gsp 已定制,如下所示

创建.gsp

<g:each var="i" in="${(0..4)}">
    <div class="fieldcontain  required">
    <label for="description">
            Option ${i + 1}.
            <span class="required-indicator">*</span>
        </label>
        <g:textArea name="choiceCollection[${i}].description" cols="40" rows="5" maxlength="2000" value="${questionInstance?.choiceCollection[i]?.description}"/>
    </div>
</g:each>

当我尝试访问创建视图时,出现以下错误

Error evaluating expression [questionInstance?.choiceCollection[i]?.description]: Cannot invoke method getAt() on null object

问题:我应该怎么做才能运行我的应用程序?

Grails 版本:2.1.1

4

3 回答 3

9

我在尝试使用 Java 8 运行 grails (2.2.4) 时观察到此错误。原因不是很明显。它被埋在某处 grails.util.BuildSettings.groovy

当我恢复到 java 1.7 时,该消息消失了。

于 2014-06-17T22:00:36.683 回答
7

而不是通过 [] 访问使用 getAt,然后?操作员将工作:

choiceCollection?.getAt(1)?.description
于 2012-10-07T09:51:03.843 回答
0

尝试仅对现有选择进行迭代:

<g:each status="i" var="choice" in="${questionInstance.choiceCollection}">
    <div class="fieldcontain  required">
        <label for="description">
            Option ${i + 1}.
            <span class="required-indicator">*</span>
        </label>
        <g:textArea name="choiceCollection[${i}].description" cols="40" rows="5" maxlength="2000" value="${choice.description}"/>
    </div>
</g:each>

这应该可以解决问题...

于 2012-10-07T09:23:51.767 回答