【问题标题】:Unclosed GSP expression: Grails GSP engine does not resolve nested GSP expression未关闭的 GSP 表达式:Grails GSP 引擎无法解析嵌套的 GSP 表达式
【发布时间】:2012-10-05 08:37:19
【问题描述】:

我需要创建一个自定义gsp,其域模型设计如下

class Question {

    SortedSet<Choice> choiceCollection;

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

}

每个问题对象都有五个选项。因此,我创建了以下 sn-p 代码

create.gsp

<g:each var="i" in="${(1..5)}">
    <div class="fieldcontain  required">
    <label for="description">
            Option ${i}.
            <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>

虽然 Grails GSP 引擎抱怨 Unclosed GSP 表达式 这是不正确的 - g:textArea 如上所示已关闭 - 但我相信真正的问题是表达式

${questionInstance?.choiceCollection[${i}]?.description}

涉及嵌套的 GSP 表达式。

问题:我是否缺少某些功能?如果是这样,我应该怎么做才能克服我的障碍?

Grails 版本:2.1.1

【问题讨论】:

    标签: grails groovy gsp


    【解决方案1】:

    不应该

    ${questionInstance?.choiceCollection[${i}]?.description}
    

    成为

    ${questionInstance?.choiceCollection[ i ]?.description}
    

    设置位:

    尝试类似:

    <g:each var="choice" status="i" in="${questionInstance?.choiceCollection}">
    

    所以i 仍然包含您的索引,但choice 包含您尝试使用questionInstance?.choiceCollection[${i}] 获得的内容

    【讨论】:

    • 谢谢 (+1)。现在,在使用 TreeSet 初始化我的 SortedSet 后,我​​得到 No signature of method: java.util.TreeSet.getAt() is applicable for argument types: (java.lang.Integer) ?你知道为什么吗 ?我应该怎么做才能运行我的应用程序?
    • 是的,你不能从 Set 中获取位置元素,甚至是 SortedSet :-( 你可能想从 Set 到 List,或者将项目保留在 List 中,然后使用list.unique().sort() 模仿你从TreeSet 获得的功能。或者你可以只使用each 来迭代集合而不是尝试使用整数索引,即:([ 1, 2, 3 ] as TreeSet).each { println it }
    • @ArthurRonaldFDGarcia 添加了一些关于替换 each
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-07
    • 1970-01-01
    • 2021-07-18
    • 1970-01-01
    • 1970-01-01
    • 2017-10-05
    • 1970-01-01
    相关资源
    最近更新 更多