开发者

How do I (or should I?) access the service layer from a SiteMesh template (views/layouts/main.gsp) in Grails?

开发者 https://www.devze.com 2023-02-05 07:19 出处:网络
I need to create a toplist in the page footer on a site that I\'m building. The footer is created in the default SiteMesh layout template (views/layouts/main.gsp).

I need to create a toplist in the page footer on a site that I'm building. The footer is created in the default SiteMesh layout template (views/layouts/main.gsp).

In order to create the toplist access to the databas开发者_Python百科e is needed, so I've encapsulated all logic needed for the toplist creation in a service class (services/FooService).

Please note that while services are usually accessed from the controller layer, in this case the default layout template (views/layouts/main.gsp) is not generated from a controller.

  • Can the layout view (views/layouts/main.gsp) access a service class? How?
  • Is this the correct design decision? If not, what is a better encapsulation and how do I interact with said encapsulation from the layout view (views/layouts/main.gsp)?


I would suggest creating a tag library (documented here) to wrap the rendering of your footer. You can inject your service into the tag library class by simply declaring a field with the same name.

Then get what you need from the service and either output the html directly or better yet create a _footer.gsp and render it with render template: 'footer', model: [yourmodel: model].


You should access your service from your controllers instead of the views.

0

精彩评论

暂无评论...
验证码 换一张
取 消