因此,我刚刚开始将Grails / Groovy用于我的高级顶点项目,并且我的工作有些艰难。我遇到的问题是,当我在 Controller 中设置模型的映射时,我可以遍历它并将其打印到控制台,但是当我尝试从 View 中访问它时,我会得到空白页。

Domain类很简单:

package ot

class CrewDeskMapping {
    String crewDesk
    String desk
}

以及创建测试数据的Bootstrap文件:
...
new CrewDeskMapping(crewDesk:"North",desk:"MON1").save()
new CrewDeskMapping(crewDesk:"North",desk:"TWI1").save()
new CrewDeskMapping(crewDesk:"North",desk:"NWE1").save()
...

这是我的 Controller :
import ot.CrewDeskMapping;

class DashboardController {

def index() {

    def desks = CrewDeskMapping.list()
    [desks:desks]
    for (d in desks) {
        System.out.println(d.desk);
    }
}
}

控制台输出看起来应该像这样:
MON1
TWI1
NWE1
CHI1
COL1
...

和我的index.gsp的相关部分
<body>
<g:each in="${desks}">
    <p>Title: ${it.crewDesk}</p>
    <p>Author: ${it.desk}</p>
</g:each>
</body>

最令人困惑的部分是,如果我尝试使用相同的代码,但使用不同的Domain,则效果很好。我已经解决了这个问题几天了,但是没有任何帮助,我们将不胜感激!

最佳答案

def desks = CrewDeskMapping.list()
[desks:desks]
for (d in desks) { ...

不返回您的[desks: desks]
交换for[desks: ...]或在末尾添加适当的return语句,如下所示:
def index() {
    def desks = CrewDeskMapping.list()
    desks.each{ log.debug it.desk } // groovier debug print
    // must be last in the method like a regular return in java,
    // but groovy allows implicit return of the last statement
    /*return*/ [desks:desks]
}

10-08 16:02