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>