【问题标题】:grails <g:select> drop down unable to display correct valuegrails <g:select> 下拉无法显示正确的值
【发布时间】:2014-07-24 22:05:32
【问题描述】:

这个下拉菜单几乎也是我想要的。我无法显示答案对象的body 属性或toString

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

不幸的是,无论我尝试什么组合,我都无法获得下拉菜单,默认情况下,选择correctAnswer,而不使用from 属性中的id

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

我做错了什么?

问题

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"
    }
}

【问题讨论】:

    标签: grails


    【解决方案1】:

    我会说,这应该可行:

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

    【讨论】:

    • 遇到没有选择的问题。我不明白为什么,因为questionInstance.correctAnswerquestionInstance.answers 中的第一项相同
    • 尝试实现equals()hashCode() 以确保Question 类中的id 相等
    • 我已将@EqualsAndHashCode 注释添加到问题域中,并且一切正常!你知道为什么有必要这样做吗?
    • 添加optionKey="id" 将导致下拉菜单在页面加载时取消选择正确答案。这种奇怪的行为
    • 默认的相等方法不考虑id。
    【解决方案2】:

    您能否提供域问题和答案?

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

    只要域具有名称属性。

    【讨论】:

    • 我可以使用选项键和值,但前提是我从from="${questionInstance.answers.id}" 中删除了id,这会阻止默认选择正确答案
    • 我会尝试在我的系统中模拟它并告诉你。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多