Gaelyk - Как я могу передавать объекты модели между Controller и View - PullRequest
1 голос
/ 31 мая 2011

Я только начинаю использовать Gaelyk.

Я ожидал, что он будет вести себя как Spring MVC;Я создаю свой объект модели в controller.groovy, а форматирую объект модели в .gtpl.

В контроллере я делаю это

def model = new MyModel()
model.setMyId(2)

, а в .gtpl я делаюthis

<h1>Test ${model.myId}</h1>
<p>
    Model object is ${model}
</p>

Однако, когда я запускаю это, я получаю MissingPropertyException

groovy.lang.MissingPropertyException: No such property: model for class: SimpleTemplateScript1

В примерах учебника объект модели включается в атрибут javax.servlet.http.HttpServletRequest , который доступен для .gtpl.

Действительно ли это единственный способ передачи данных между контроллером и шаблоном?Я чувствовал бы себя чище, если бы мог избежать загрязнения объектов Request (или Response).

Ответы [ 2 ]

4 голосов
/ 31 мая 2011

Я думаю, что ваш единственный вариант - это объект запроса (как вы говорите). Вы устанавливаете переменные в объекте запроса как:

def model = new MyModel()
model.setMyId(2)
request.model = model

forward 'view.gtpl'

Затем в view.gtpl вы делаете:

<h1>Test ${request.model.myId}</h1>
<p>
    Model object is ${request.model}
</p>

Поскольку request недолговечен, я бы не сказал, что он загрязняет объект Request, а больше его использует; -)

И это намного лучше, чем использовать (например) объект сеанса

PS: я понимаю, что вы, вероятно, уже знаете, как все это работает, поскольку вы заявляете, что документы говорят использовать объект запроса: - /

0 голосов
/ 16 октября 2012

добавив к ответу tim_yates, вы можете заключить весь gtpl следующим образом:

контроллер:

request.model = [myId:123]

вид:

<% request.model.with{ %>
...
<p> this is my id: ${myId} </p>
...
<% } %>
...