Grails - вид, не распознающий модель - PullRequest
0 голосов
/ 16 февраля 2012

У меня есть контроллер, который получает список объектов, связанных с пользователем, и передает его в представление с помощью метода рендеринга, например:

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: each не запускается ни разу, как если бы переменная returnPosts была нулевой, хотя в контроллере println показывает, что это не так.

Я схожу с ума, пытаясь понять это, может кто-нибудь увидеть причину, по которой у представления не будет доступа к этой переменной?

Ответы [ 2 ]

0 голосов
/ 02 апреля 2012

Есть несколько вещей, которые вы можете сделать, чтобы решить эту проблему. Во-первых, если ваше представление называется 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>
0 голосов
/ 02 апреля 2012

Похоже, у вас есть атрибут контроллера «post», а также ваш g.each var - «post» Потенциальная проблема там?

...