3

次のように設計された質問ドメインモデルがあります

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

4

3 に答える 3

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 に答える