我有一个控制器,它获取与用户关联的对象列表,并使用render方法将其传递给视图,如下所示:
class HomeController {
def index() {
def postList = user.posts
postList.each{ it ->
println "Title: " + it.title
}
render(view: "/index", model: [returnPosts: postList])
}
在我看来,我有以下代码:
<h2>Recent Posts:</h2>
<ul>
<g:each var="post" in="${returnPosts}">
<li><g:link controller="post" action="show" id="${post.id}">${post.title}</g:link></li>
</g:each>
</ul>
现在,在我的控制器中,我已经放入'println'语句以确保列表不为空,并且确定不是。但是,当我打开页面时,g:每个标记都不会运行,就像“returnPosts”变量为null一样,即使在控制器中,println语句显示它不是。
我一直在疯狂地试图解决这个问题,任何人都可以看到为什么视图无法访问此变量的原因?
答案 0 :(得分:0)
你似乎有一个名为'post'的控制器属性,你的g.each var也是'post'。那里有潜在的问题吗?
答案 1 :(得分:0)
您可以采取一些措施来解决此问题。首先,如果您的视图名为index.gsp,那么您不需要显式调用render,返回模型对象列表。您的代码将如下所示:
def index() {
def postList = user.posts
postList.each{ it ->
println "Title: " + it.title
}
[returnPosts: postList]
}
您还可以做的另一件事是显式导入您在视图中访问的模型对象。并不重要,但你可以尝试使用post以外的名字,因为它是一个常用词。所以你的gsp看起来像这样:
<%@ page import="com.blah.post" %>
<h2>Recent Posts:</h2>
<ul>
<g:each in="${returnPosts}" var="post">
<li><g:link controller="post" action="show" id="${post.id}">${post.title}</g:link></li>
</g:each>
</ul>