【问题标题】:How Handle multiple customers in a single grails application with customised look and feel?如何在具有自定义外观的单个 grails 应用程序中处理多个客户?
【发布时间】:2009-12-08 17:01:16
【问题描述】:

我的应用需要在运行时支持多个客户。它们都将显示相同的数据,使用相同的控制器、服务,但具有不同的布局、css 和图像。

我的基本思路如下:

1) 有一个过滤器来验证并在会话中设置一个配置值 2)我的控制器代码将按照以下方式调用: 渲染(视图:“/${session.userContext}/test/test”)

所以对于 customer1,我们将渲染:views/customer1/test/test.gsp

理想情况下,我希望在 /views/customer1/ 目录中拥有所有自定义视图和布局,但站点网格会在 /views/layouts 目录中查找布局,但我找不到解决方法。从这个意义上说,这个解决方案有点笨拙,因为我没有得到我想要的隔离级别。

如果我可以在运行时设置 grails 渲染方法的根,例如不是从视图开始,而是查看视图/客户1 唉,我不知道该怎么做,但他似乎是最聪明的解决方案。

任何帮助将不胜感激。

干杯,

Gav

【问题讨论】:

    标签: grails multi-tenant personalization


    【解决方案1】:

    我建议考虑创建GrailsLayoutDecoratorMapper 的子类。由于您可以访问完整的 HttpServletRequest,因此您可以根据您区分一个客户与另一个客户的方式(域、会话变量等)呈现不同的视图。如果您无法确定当前请求的正确视图/布局,您可以简单地委托给 GrailsLayoutDecoratorMapper 以保持默认行为。

    要配置自定义的DecoratorMapper,您需要修改/web-app/WEB-INF/sitemesh.xml 并将默认的<mapper class="org.codehaus.groovy.grails.web.sitemesh.GrailsLayoutDecoratorMapper" />替换为您的自定义实现。

    【讨论】:

      【解决方案2】:

      查看Multi-Tenant plugin - 看起来它也可以帮助您完成应用程序的其余部分。

      您必须通过传入布局名称来处理从控制器指定layouts -> <meta name="layout" content="$layoutName"> 我认为您无法在不覆盖默认设置的情况下让 Grails 隔离您的布局布局装饰器映射 bean。

      【讨论】:

      • 如果他的要求只是每个客户的不同布局,多租户插件会增加非常大的开销,同时不能直接解决他的需求。如果他需要一个真正的多租户应用程序(根据客户行为、外观和感觉、安全性等),那么该插件非常适合。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-05
      • 1970-01-01
      • 1970-01-01
      • 2013-08-14
      • 1970-01-01
      • 2012-07-17
      相关资源
      最近更新 更多