2014-10-28 67 views
0

因此,我刚开始使用Grails/Groovy作为我的高级顶点项目,并且我开始有点棘手。我遇到的问题是,当我在控制器中设置模型的映射时,我可以循环并将其打印到控制台,但是当我尝试从视图中访问它时,我会看到空白页。无法在gsp页面中显示模型

域类很简单:

package ot 

class CrewDeskMapping { 
    String crewDesk 
    String desk 
} 

以及创建测试数据的引导文件:

... 
new CrewDeskMapping(crewDesk:"North",desk:"MON1").save() 
new CrewDeskMapping(crewDesk:"North",desk:"TWI1").save() 
new CrewDeskMapping(crewDesk:"North",desk:"NWE1").save() 
...  

这里是我的控制器:

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> 

最令人困惑的部分相关的部分是,如果我尝试相同的代码,但域名不同的只是正常工作。我一直在这个问题已经几天了,没有任何帮助,将不胜感激!

回答

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

不会返回[desks: desks]

交换for和或类似这样的末尾加上合理的回报声明:

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] 
} 
+0

太谢谢你了!我什至不记得它在最后的任何地方! – 2014-10-28 15:17:13

+0

为了更好的代码可读性,我推荐使用'respond'方法。看到这个:http://grails.org/doc/latest/ref/Controllers/respond.html – ricardogobbo 2014-10-28 15:18:47

+1

或者更明显也更不深奥 - 使用可选的'return'关键字;) – 2014-10-28 21:41:49