Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我(或者应该)如何从Grails中的SiteMesh模板(views/layouts/main.gsp)访问服务层?_Grails - Fatal编程技术网

我(或者应该)如何从Grails中的SiteMesh模板(views/layouts/main.gsp)访问服务层?

我(或者应该)如何从Grails中的SiteMesh模板(views/layouts/main.gsp)访问服务层?,grails,Grails,我需要在我正在构建的网站的页脚中创建一个toplist。页脚是在默认的SiteMesh布局模板(views/layouts/main.gsp)中创建的 为了创建toplist,需要访问数据库,因此我将创建toplist所需的所有逻辑封装在一个服务类(services/FooService)中 请注意,虽然通常从控制器层访问服务,但在这种情况下,默认布局模板(views/layouts/main.gsp)不是从控制器生成的 布局视图(views/layouts/main.gsp)能否访问服务类?

我需要在我正在构建的网站的页脚中创建一个toplist。页脚是在默认的SiteMesh布局模板(
views/layouts/main.gsp
)中创建的

为了创建toplist,需要访问数据库,因此我将创建toplist所需的所有逻辑封装在一个服务类(
services/FooService
)中

请注意,虽然通常从控制器层访问服务,但在这种情况下,默认布局模板(
views/layouts/main.gsp
)不是从控制器生成的

  • 布局视图(
    views/layouts/main.gsp
    )能否访问服务类?怎么做
  • 这是正确的设计决策吗?如果不是,什么是更好的封装,以及如何从布局视图(
    views/layouts/main.gsp
    )与所述封装交互

您应该从控制器而不是视图访问服务。

我建议创建一个标记库()来包装页脚的呈现。只需声明一个同名字段,即可将服务注入标记库类


然后从服务中获取所需内容,直接输出html,或者更好地创建一个
\u footer.gsp
,并使用
呈现模板:'footer',model:[yourmodel:model]

谢谢您的回答,但这并不能解决我的问题,因为默认模板(views/layouts/main.gsp)不是从控制器渲染的。是否可以从SiteMesh布局模板(在本例中为views/layouts/main.gsp)使用标记库?确定-标记设计为从模板内使用。它们是您的操作版本(例如)
并缓存tagLib调用的输出