我有一个如下设计的问题域模型
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
答案 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>
这应该可以解决问题...