评估表达式时出错:无法在null对象上调用方法getAt()

时间:2012-10-07 08:23:49

标签: grails groovy gsp

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

class Question {

    List<Choice> choiceCollection;

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

}

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

create.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

3 个答案:

答案 0 :(得分:9)

我在尝试使用Java 8运行grails(2.2.4)时发现了这个错误。原因并不是很明显。它被埋在某处grails.util.BuildSettings.groovy

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

答案 1 :(得分:6)

而不是通过[]访问使用getAt,那么?运营商将工作:

choiceCollection?.getAt(1)?.description

答案 2 :(得分: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>

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