【问题标题】:How do I (or should I?) access the service layer from a SiteMesh template (views/layouts/main.gsp) in Grails?我如何(或者我应该?)从 Grails 中的 SiteMesh 模板 (views/layouts/main.gsp) 访问服务层?
【发布时间】:2011-01-15 19:50:12
【问题描述】:

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

为了创建顶级列表需要访问数据库,所以我将创建顶级列表所需的所有逻辑封装在一个服务类 (services/FooService) 中。

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

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

【问题讨论】:

    标签: grails


    【解决方案1】:

    我建议创建一个标签库 (documented here) 来包装页脚的渲染。您可以通过简单地声明一个具有相同名称的字段来将您的服务注入标签库类。

    然后从服务中获取您需要的内容并直接输出 html,或者更好地使用render template: 'footer', model: [yourmodel: model] 创建_footer.gsprender it

    【讨论】:

    • 能否从 SiteMesh 布局模板(在本例中为 views/layouts/main.gsp)使用标签库?
    • 当然——标签被设计为在模板中使用。他们是你的版本(例如)<g:checkBox ... />
    • 并缓存tagLib调用的输出
    【解决方案2】:

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

    【讨论】:

    • 感谢您的回答,但这并不能解决我的问题,因为默认模板 (views/layouts/main.gsp) 不是从控制器呈现的。
    猜你喜欢
    • 2011-06-10
    • 2013-07-27
    • 1970-01-01
    • 1970-01-01
    • 2011-11-09
    • 2011-06-10
    • 2012-07-01
    • 1970-01-01
    • 2012-02-13
    相关资源
    最近更新 更多