Grails - 查看不识别模型

时间:2012-02-16 09:22:14

标签: grails view gsp

我有一个控制器,它获取与用户关联的对象列表,并使用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语句显示它不是。

我一直在疯狂地试图解决这个问题,任何人都可以看到为什么视图无法访问此变量的原因?

2 个答案:

答案 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>