grails下拉列表无法显示正确的值

grails下拉列表无法显示正确的值,grails,Grails,这个下拉列表也几乎按照我想要的方式工作。我无法显示应答对象的body属性或toString <g:select name="questionId" from="${questionInstance.answers.id}" value="${questionInstance.correctAnswer.id}" noSelection="['':'Select a Module']" /> 我做错了什么 问题 答复 你能提供域名的问题

这个下拉列表也几乎按照我想要的方式工作。我无法显示应答对象的body属性或toString

<g:select name="questionId"
        from="${questionInstance.answers.id}"
        value="${questionInstance.correctAnswer.id}"
        noSelection="['':'Select a Module']" />
我做错了什么

问题 答复
你能提供域名的问题和答案吗

同时,尝试添加属性optionKey=id optionValue=name


如果域具有名称属性。

我认为,这应该可以:

<g:select name="questionId"
    from="${questionInstance.answers}"
    value="${questionInstance.correctAnswer}"
    optionKey="id"
    optionValue="body"
    noSelection="['':'Select a Module']" />

我可以使用选项key和value,但前提是我从from=${questionInstance.answers.id}中删除id,这会阻止默认选择正确的答案。我将尝试在我的系统中模拟它,并让您知道。遇到未选择任何内容的问题。我不明白为什么,因为questionInstance.correctAnswer和questionInstance.answers中的第一项是实现equals和hashCode的相同方法,以确保问题类中id的相等。我已将@EqualsAndHashCode注释添加到问题域中,并且每个符号都可以正常工作!您知道为什么必须这样做吗?添加optionKey=id将导致下拉菜单在页面加载时取消选择正确答案。这种奇怪的行为默认的相等方法不考虑id。
class Question {

    DateTime dateCreated
    DateTime lastUpdated

    String body
    Answer correctAnswer
    Integer ordinal

    static belongsTo = [lesson: Lesson]
    static hasMany = [answers: Answer]

    static constraints = {
        body blank: false
        correctAnswer nullable: true,
                validator: { Answer val, Question obj ->
                // Correct answer must have this as it's question
                val ? val.question == obj : true // TODO: Give this a proper error message
            }
        ordinal unique: 'lesson'
    }

    static mapping = {
        lesson lazy: false
        answers sort: 'ordinal'
    }
}
class Answer {

    DateTime dateCreated
    DateTime lastUpdated

    String body
    Integer ordinal
    String reason

    static belongsTo = [question: Question]

    static constraints = {
        body blank: false
        ordinal unique: 'question'
        reason blank: false
    }

    static mapping = {
        question lazy: false
    }

    String toString() {
        "Answer: $body"
    }
}
<g:select name="questionId"
    from="${questionInstance.answers}"
    value="${questionInstance.correctAnswer}"
    optionKey="id"
    optionValue="body"
    noSelection="['':'Select a Module']" />