Grails-品牌应用程序

Grails-品牌应用程序,grails,Grails,这是一个挑战:根据传入的URL,我想显示一个特定的登录页,以及登录时基于用户身份的特定用户体验 例如,www.abc.com和www.xyz.com都指向一个提供公共门户体验的Grails实例。如果用户通过www.abc.com到达,我想显示带有登录表单的abc启动页面。如果用户通过www.xyz.com到达,我想显示带有登录表单的xyz启动页面 一旦用户登录,我需要保留由传入URL确定的原始“品牌”上下文。例如,即使所有GSP、控制器等都由所有用户共享,ABC用户也会选择自己的CSS、资源包(

这是一个挑战:根据传入的URL,我想显示一个特定的登录页,以及登录时基于用户身份的特定用户体验

例如,www.abc.com和www.xyz.com都指向一个提供公共门户体验的Grails实例。如果用户通过www.abc.com到达,我想显示带有登录表单的abc启动页面。如果用户通过www.xyz.com到达,我想显示带有登录表单的xyz启动页面

一旦用户登录,我需要保留由传入URL确定的原始“品牌”上下文。例如,即使所有GSP、控制器等都由所有用户共享,ABC用户也会选择自己的CSS、资源包(或条目)等,用户的视觉体验也会与XYZ用户截然不同

这可能吗?或者我需要分支应用程序代码库并承载多个独立门户实例吗?

看一看,我认为它可以解决你90%的问题。每个域都有一个特定的布局。布局为每个视图加载,可以帮助定义外观

您可以根据URL在过滤器中设置变量,然后可以在布局中读取URL


谢谢你,亚伦。我计划使用布局,但我没有弄清楚的是:(a)如何基于传入URL设置初始登录页,以及(b)如何基于传入URL设置上下文变量,以便我可以通过编程确定在每个页面上使用哪个布局。(我有点想我必须这样做:)Aaron-你的评论在这方面引发了一些创造性的思考,我们能够通过使用过滤器(如你所建议的)、taglibs和i18n来解决这个问题。谢谢该过滤器定义有点错误,因为它没有声明“before”、“after”或“afterView”。它可能会在未来的版本中中断,因为行为尚未定义。对于这些情况,我更喜欢使用“after”过滤器,从中可以向视图/布局模型中添加额外的值。
class MyFilters {
   def filters = {
        myFilter(controller:'*', action:'*') {
            after = {
              if (request.requestURI == "xyz") {
                session.layout = "layout1.gsp"
              } else {
                session.layout = "layout2.gsp"
              }
           } 
        }
   }
}