Как мне (или я должен?) Получить доступ к служебному слою из шаблона SiteMesh (views / layouts / main.gsp) в Grails? - PullRequest
2 голосов
/ 15 января 2011

Мне нужно создать топлист в нижнем колонтитуле на сайте, который я создаю. Нижний колонтитул создается в шаблоне макета SiteMesh по умолчанию (views/layouts/main.gsp).

Для создания топлиста необходим доступ к базе данных, поэтому я инкапсулировал всю логику, необходимую для создания топлиста в классе обслуживания (services/FooService).

Обратите внимание, что, хотя к службам обычно обращаются с уровня контроллера, в этом случае шаблон макета по умолчанию (views/layouts/main.gsp) - , а не , сгенерированный из контроллера.

  • Может ли представление макета (views/layouts/main.gsp) получить доступ к классу обслуживания? Как?
  • Это правильное проектное решение? Если нет, что является лучшей инкапсуляцией и как мне взаимодействовать с указанной инкапсуляцией из вида компоновки (views/layouts/main.gsp)?

Ответы [ 2 ]

8 голосов
/ 15 января 2011

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

Затем получите то, что вам нужно от службы, и либо выводите html напрямую, либо лучше, но создайте _footer.gsp и , визуализируйте его с render template: 'footer', model: [yourmodel: model].

0 голосов
/ 15 января 2011

Вы должны получать доступ к своему сервису с ваших контроллеров вместо представлений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...