Grails GSP-модель инъекционного жучка

У меня есть следующий контроллер Grails 2.3.6:

@Slf4j
class FizzController {
    def index() {
        List<Widget> widgets = getSomehow()

        log.info("About to render foo.gsp with ${widgets.size()} widgets.")

        render (
            view: "foo",
            model: widgets
        )
    }
}

куда foo.gsp является:

<!DOCTYPE html>
<html>
<head>
    <omitting a bunch of stuff for brevity>
</head>
<body>
    <h3>Widget List:</h3>
<g:each in="${widgets}" var="widget" >
    <h2>Name: ${widget.name}, Type: ${widget.type}</h3>
</g:each>
</body>
</html>

Когда я делаю Грааль run-app и перейдите в моем браузере, чтобы:

http://localhost:8080/myapp/fizz

Я вижу свой foo GSP view/page (с <h3> тег заголовка), однако больше ничего не отображает. Когда я просматриваю исходный код страницы, я вижу:

<div id="page-body">
    <h3>Widget List:</h3>
</div>

Это указывает на то, что я ввожу пустой List<Widget>, право?

Однако в моем выводе журнала я вижу:

О том, чтобы сделать foo.gsp с 1 виджетом.

Так что на самом деле кажется, что у меня есть непустой List<Widget>, но, видимо, я не правильно вводить его в мой GSP. Так что здесь происходит?

1 ответ

Решение

Вы передаете не ту модель, это должна быть карта:

    List<Widget> widgets = getSomehow()

    render (
        view: "foo",
        model:[ widgets:widgets ]
    )

тогда вы можете получить к нему доступ в своем GSP:

<g:each in="${widgets}" var="widget" >
  <h2>Name: ${widget.name}, Type: ${widget.type}</h3>
</g:each>
Другие вопросы по тегам